用JAVA正则表达式轻松替换JSON中大字段

  • (一)背景
  • (二)正则表达式
  • (三)在JAVA代码中的实现
  • (四)合并正则表达式
  • (五)最终结果
  • (六)所感

(一)背景

在软件开发工作中我们经常用JSON来传输数据,根据业务需要不免会在JSON数据中传输比较大的数据,有时传输一个图片数据会达到几百K或者几M,而这些大字段数据在记录日志时,不论是文件日志还是数据库日志,都会造成大量的IO处理,使接口的响应速度大幅下降,同时会增加服务的负载,降低系统的性能。这时我们可以选择不输出这个JSON数据,但往往这样会造成更大的问题,因此我们会想如果只不输出大字段数据,而其他数据正常输出就好了,但从技术上往往不易实现。本文就是给大家提供一种方法,利用JAVA的正则表达式简单方便的替换掉这些大字段,同时不影响其他JSON字段的输出。

(二)正则表达式

我们在这里就不详细介绍正则表达式的用法了,只针对大字段匹配相关的正则表达式进行讲解。

  • 匹配JSON 字段的字段值的正则表达式
    “:\s*\".+?\"”
  • 匹配超过1000的长度的正则表达式
    .{1000,}
  • 结合以上的两个正则表达式
    (?=.{1000,})(:\s*\".+?\")

(三)在JAVA代码中的实现

  • 在这里写一个小例子
    String json = "{\"name\":\"Tom\",\"px\":\"abcdefg11111111111111111111111111\"}";String pattern = "(?=.{10,})(:\\s*\\\".+?\\\")";json = json.replaceAll(pattern, ":\"*\"");System.out.println(json);
  • 执行结果
    {"name":"*","px":"*"}

怎么回事?和预想不一致,看来事情并不那样的简单,查一下?=的用法,现在这种写法相当来说是两个正则的逻辑与, .{10,}是匹配了一行超过10个字符,而(:\s*".+?")则匹配了json的值项目,也就是说只要这一行超过了10个字符,那么其中的json值都会被替换。知道了原因我们就好办了。把两个正则合为一个正则不就OK了吗。

(四)合并正则表达式

  • 我们改善以下上面的例子,
    String json = "{\"name\":\"Tom\",\"px\":\"abcdefg11111111111111111111111111\"}";String pattern = "(:\\s*\\\".{10,}?\\\")";json = json.replaceAll(pattern, ":\"*\"");System.out.println(json);
  • 执行结果
    {"name":"*"abcdefg11111111111111111111111111"}

阿来,怎么会这样。他竟然匹配到了。。。
{“name”:“Tom”,“px”:“abcdefg11111111111111111111111111”}

  • 随然还是不对,但离胜利只差一步了,我们在匹配中用的是.{10,},可以匹配任何字符,因此才会造成这种问题,那么我们把正常值中不应该出现的字符排除掉不就可以了吗。

(五)最终结果

   String json = "{\"name\":\"Tom\",\"px\":\"abcdefg11111111111111111111111111\"}";String pattern = "(:\s*\"[^,\":]{10,}?\")";json = json.replaceAll(pattern, ":\"*\"");System.out.println(json);
  • 执行结果
   {"name":"Tom","px":"*"}

我们终于得到了想要的结果。

(六)所感

其实大家都觉得正则表达式比较高深,但如果我们了解了它的原理,正确的应用到工作中,会得到意想不到的惊喜。
有时由于用法不当可能马上得不到我们想要的结果,但我认为先不要轻易放弃而改变方向,而要分析造成问题的原因并想办法解决,这样对正则表达式的理解和使用能力才能不断提高,希望这篇文章能对大家有所帮助。

用JAVA正则表达式轻松替换JSON中大字段相关推荐

  1. java正则表达式参数替换,正则表达式替换(String对象的replace)方法笔记

    String对象的replace方法 参数 relpace( [ reg | string ], [ string | function ] ) 第一个参数表示执行匹配的正则表达式,也可以传递字符串 ...

  2. 在 MyBatis 里,如何将 JSON 型字段到 Java 类的映射

    一.简介 我们在用MyBatis里,很多时间有这样一个需求:POJO里有个属性是非基本数据类型,在DB存储时我们想存的是json格式的字符串,从DB拿出来时想直接映射成目标类型,也即json格式的字符 ...

  3. 【Java正则表达式】正则基本语法、使用方式(分组、替换、分割)、简单爬虫基础

    正则表达式基本语法 笔记扫描版 在Java中使用正则表达式 示例1:一个简单的正则表达式 package cn.hanquan.reg;import java.util.regex.Matcher; ...

  4. java解析sql查询字段_sql解析json格式字段 如何获取json中某个字段的值?

    java将json数据解析为sql语句?小编给你倒一杯热水.可你惦记着其他饮料,所以你将它放置一旁.等你想起那杯水时,可惜它已经变得冰冷刺骨. 图片中是json数据,每个数据的开头都有表名称,操作类型 ...

  5. java regex match 替换_java正则表达式四种常用的处理方式(匹配、分割、替代、获取)...

    java 正则表达式高级篇,介绍四种常用的处理方式:匹配.分割.替代.获取,具体内容如下 package test; import java.util.regex.Matcher; import ja ...

  6. JavaWeb加强之JSON、jQuery、Ajax、Java正则表达式、过滤器、监听器、模板引擎FreeMarker

    过滤器.监听器,以及JSON.Ajax和正则表达式等开发必备技能,并学习文件上传和验证码等功能开发. 2.4.1 JSON基础 JSON的基础语法,以及流行JSON框架FastJSON的使用. 内容: ...

  7. Java正则表达式之分组和替换

    正则表达式的子表达式(分组)不是很好懂,但却是很强大的文本处理工具. 1 正则表达式热身 匹配电话号码 // 电话号码匹配 // 手机号段只有 13xxx 15xxx 18xxxx 17xxx Sys ...

  8. java反射实现自定义json转对象方法-忽略字段大小写、字段个数

    java反射实现自定义json转对象方法-忽略字段大小写.字段个数 开发过程中经常会遇到json转对象,可以使用FastJson或者Gson自带的工具类进行转换,但当遇到json与对象属性名称大小写不 ...

  9. GSON将Java对象转成JSON时,如何排除某些字段

    GSON 是Google发布的 JSON 序列化/反序列化工具,非常容易使用.本文简要讨论在使用GSON将Java对象转成JSON时,如何排除某些字段. 最简单的用法 假设有下面这个类: 1 clas ...

最新文章

  1. 股票交易应用系统的性能分析工具介绍(一)
  2. 【报错笔记】使用MultipartFile 出现异常:java.lang.ClassNotFoundException: org.apache.commons.fileupload...
  3. python办公自动化excel_python办公自动化:Excel操作入门
  4. Written English-书面-现在完成时
  5. 【Java从0到架构师】SpringMVC - 返回值
  6. Javascript深入理解构造函数和原型对象
  7. Kaldi(A1)语音识别原理
  8. 动态规划 钢条切割问题
  9. Java的GUI窗体出现乱码解决方法
  10. Python(十九):比较、深浅拷贝
  11. 用PS设计等高线效果的背景图片
  12. springboot的底层注解【详细】
  13. 汽车线性二自由度动力学模型-simulink仿真
  14. 查看php是否支持sg11,云虚拟主机支持SG11扩展
  15. 卡方检验有哪些指标?卡方值怎么计算?
  16. 实时渲染3D动画创作大赛
  17. oracle exp 排除某些表导出其他表
  18. 谷歌浏览器截全图小技巧
  19. iOS中开发者账号分类
  20. ARC059 E - Children and Candies(dp)

热门文章

  1. 多目立体匹配的前世今生 | 聊一聊MVS及其在3D检测中的应用
  2. 夯实算力底座,“中原计算”开创河南AI产业新局面
  3. 【转】降低软件复杂性的一般原则和方法
  4. 5分钟征服面试官系列-云计算方向
  5. 『常识』盈利模式、商业模式、经营模式的区别
  6. tomcat运行springmvc项目:m2e-wtp error: path/target/m2e-wtp/web-resources/META-INF/MANIFEST.MF (No such
  7. 用java写一个简易画图板
  8. Strage Foundation 安装报告
  9. 代码生成工具 rapid-framework
  10. mysql的查询排序规则_mysql 如何查看数据库字符集和排序规则