前言

最近在开发一个自动化回归接口的工具,需要将调用接口返回的出参报文和预设的报文进行比对,但是出参中有一些比如so_nbr或者返回操作时间的字段,这些字段每次调用都是不一样的,那么如果直接比对的话肯定是不通过的,所以需要将不重要的字段替换为其他固定的字符,比如我这里把这些会产生随机数据的字段全部替换为字符串“ignore”,这样比对下来的结果就是正确的。所以我写了一个工具类用于替换嵌套很深且复杂的json串的工具方法,如下:

package com.cz.json;import com.google.gson.*;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;/*** Json字符串工具类* @program: PostGirl-panent* @description: JsonUtil* @author: Cheng Zhi* @create: 2021-03-15 15:19**/
public class JsonUtil {/*** 递归替换json中的指定key的value* @param jsonElement* @param map* @return*/public static JsonElement replaceJsonNode(JsonElement jsonElement, Map<String,String> map) {if (map.size() == 0) {return jsonElement;}// 判断如果是简单json串直接返回if (jsonElement.isJsonPrimitive()) {return jsonElement;}// 判断如果是数组类型字符串,则逐个解析if (jsonElement.isJsonArray()) {JsonArray jsonArray = jsonElement.getAsJsonArray();JsonArray jsonArryNew = new JsonArray();Iterator iterator = jsonArray.iterator();while (iterator.hasNext()) {// 递归调用jsonArryNew.add(replaceJsonNode((JsonElement) iterator.next(),map));}return jsonArryNew;}// 判断如果是key-value类型的if (jsonElement.isJsonObject()) {JsonObject object = jsonElement.getAsJsonObject();JsonObject objectNew = new JsonObject();Iterator iterator = object.keySet().iterator();while (iterator.hasNext()) {String key = (String) iterator.next();// 如果和目标字段匹配则更换value;if (map.keySet().contains(key)) {String newValue = map.get(key);object.addProperty(key,newValue);}JsonElement jsonEle = object.get(key);JsonElement jsonElementNew = replaceJsonNode(jsonEle, map);objectNew.add(key,jsonElementNew);}return  objectNew;}return jsonElement;}public static void main(String[] args) {JsonUtil json = new JsonUtil();String str = "{\"data\":{\"pocketExtOut\":{\"listPocketExtDetail\":[{\"acct_id\":31070038925,\"asset_id\":200049395392099,\"pocket_item\":5960002,\"pocket_name\":\"新入网充值送赠费\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2019-04-01 00:00:00\",\"expire_date\":\"2019-04-30 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20190430,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200049521474514,\"pocket_item\":5960002,\"pocket_name\":\"新入网充值送赠费\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2019-06-01 00:00:00\",\"expire_date\":\"2019-06-30 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20190630,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200049455735414,\"pocket_item\":5960002,\"pocket_name\":\"新入网充值送赠费\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2019-05-01 00:00:00\",\"expire_date\":\"2019-05-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20190531,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200049535262245,\"pocket_item\":5920601,\"pocket_name\":\"电商活动和多号专款\",\"amount\":500,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2019-06-05 20:52:51\",\"expire_date\":\"2019-06-30 23:58:59\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20190630,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9990,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200049592120473,\"pocket_item\":5920601,\"pocket_name\":\"电商活动和多号专款\",\"amount\":500,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2019-07-01 00:00:00\",\"expire_date\":\"2019-07-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20190731,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9990,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200049695025140,\"pocket_item\":5920601,\"pocket_name\":\"电商活动和多号专款\",\"amount\":500,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2019-08-01 00:00:00\",\"expire_date\":\"2019-08-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20190831,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9990,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200048899854687,\"pocket_item\":5037013,\"pocket_name\":\"集团移动商城充值折扣赠费\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":1,\"billing_type\":1,\"valid_date\":\"1990-01-01 00:00:00\",\"expire_date\":\"2099-12-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":1,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20991231,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":0,\"allow_refund\":1,\"priority\":8998,\"itemType\":\"2\"},{\"acct_id\":31070038925,\"asset_id\":200048899854688,\"pocket_item\":5037012,\"pocket_name\":\"移动商城现金支付\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":1,\"billing_type\":1,\"valid_date\":\"1990-01-01 00:00:00\",\"expire_date\":\"2099-12-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":1,\"is_reward\":0,\"freeze_value\":0,\"freeze_time\":20991231,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":6999,\"itemType\":\"2\"},{\"acct_id\":31070038925,\"asset_id\":200048904991559,\"pocket_item\":5960002,\"pocket_name\":\"新入网充值送赠费\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2018-09-01 00:00:00\",\"expire_date\":\"2018-09-30 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20180930,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200048902149505,\"pocket_item\":5960002,\"pocket_name\":\"新入网充值送赠费\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":1,\"billing_type\":1,\"valid_date\":\"2018-08-31 14:59:30\",\"expire_date\":\"2099-12-31 23:58:59\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20991231,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200050184908817,\"pocket_item\":5037014,\"pocket_name\":\"总对总天猫充值预存\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":1,\"billing_type\":1,\"valid_date\":\"1990-01-01 00:00:00\",\"expire_date\":\"2099-12-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":1,\"is_reward\":0,\"freeze_value\":0,\"freeze_time\":20991231,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":6999,\"itemType\":\"2\"},{\"acct_id\":31070038925,\"asset_id\":200048957692833,\"pocket_item\":5901432,\"pocket_name\":\"营销活动赠款(不可抵扣通信账户支付)\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":1,\"billing_type\":1,\"valid_date\":\"2018-09-12 09:14:05\",\"expire_date\":\"2099-12-31 23:58:59\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20991231,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200048987434787,\"pocket_item\":5960002,\"pocket_name\":\"新入网充值送赠费\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2018-10-01 00:00:00\",\"expire_date\":\"2018-10-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20181031,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200049038450930,\"pocket_item\":5901432,\"pocket_name\":\"营销活动赠款(不可抵扣通信账户支付)\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":1,\"billing_type\":1,\"valid_date\":\"2018-10-17 17:42:11\",\"expire_date\":\"2099-12-31 23:58:59\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20991231,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200049064591835,\"pocket_item\":5960002,\"pocket_name\":\"新入网充值送赠费\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2018-11-01 00:00:00\",\"expire_date\":\"2018-11-30 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20181130,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200049121770161,\"pocket_item\":5960002,\"pocket_name\":\"新入网充值送赠费\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2018-12-01 00:00:00\",\"expire_date\":\"2018-12-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20181231,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200050285060454,\"pocket_item\":5038031,\"pocket_name\":\"集团客户充值宝专项款\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":1,\"billing_type\":1,\"valid_date\":\"1990-01-01 00:00:00\",\"expire_date\":\"2099-12-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":1,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20991231,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":0,\"allow_refund\":0,\"priority\":7999,\"itemType\":\"2\"},{\"acct_id\":31070038925,\"asset_id\":200049196967762,\"pocket_item\":5960002,\"pocket_name\":\"新入网充值送赠费\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2019-01-01 00:00:00\",\"expire_date\":\"2019-01-31 23:59:59\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20190131,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200049282356637,\"pocket_item\":5960002,\"pocket_name\":\"新入网充值送赠费\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2019-02-01 00:00:00\",\"expire_date\":\"2019-02-28 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20190228,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200050300629841,\"pocket_item\":5902151,\"pocket_name\":\"掌厅充值加赠赠费\",\"amount\":500,\"unpay_fee\":0,\"real_fee\":0,\"sts\":1,\"billing_type\":1,\"valid_date\":\"1990-01-01 00:00:00\",\"expire_date\":\"2099-12-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20991231,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":0,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200050300629842,\"pocket_item\":5020011,\"pocket_name\":\"抵扣预存款 \",\"amount\":10000,\"unpay_fee\":0,\"real_fee\":0,\"sts\":1,\"billing_type\":1,\"valid_date\":\"1990-01-01 00:00:00\",\"expire_date\":\"2099-12-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":1,\"is_reward\":0,\"freeze_value\":0,\"freeze_time\":20991231,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":6795,\"itemType\":\"2\"},{\"acct_id\":31070038925,\"asset_id\":200050388388644,\"pocket_item\":5025521,\"pocket_name\":\"全网手机支付缴话费(总对总)预存款\",\"amount\":2663,\"unpay_fee\":0,\"real_fee\":0,\"sts\":1,\"billing_type\":1,\"valid_date\":\"1990-01-01 00:00:00\",\"expire_date\":\"2099-12-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":1,\"is_reward\":0,\"freeze_value\":0,\"freeze_time\":20991231,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":6795,\"itemType\":\"2\"},{\"acct_id\":31070038925,\"asset_id\":200050397258674,\"pocket_item\":5901432,\"pocket_name\":\"营销活动赠款(不可抵扣通信账户支付)\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2020-12-01 00:00:00\",\"expire_date\":\"2020-12-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20201231,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"},{\"acct_id\":31070038925,\"asset_id\":200049337777364,\"pocket_item\":5960002,\"pocket_name\":\"新入网充值送赠费\",\"amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"sts\":0,\"billing_type\":1,\"valid_date\":\"2019-03-01 00:00:00\",\"expire_date\":\"2019-03-31 00:00:00\",\"resource_id\":0,\"is_common_pocket\":0,\"is_reward\":1,\"freeze_value\":0,\"freeze_time\":20190331,\"measure_id\":10403,\"deduct_amount\":0,\"allow_adjust\":1,\"allow_refund\":1,\"priority\":9800,\"itemType\":\"3\"}],\"acct_id\":31070038925,\"amount\":13163,\"expire_amout\":1500,\"unvalid_amount\":0,\"unpay_fee\":0,\"real_fee\":0,\"usable_balance\":12663,\"deposit_balance\":0,\"pay_type\":0,\"oper_time\":\"2021-03-15 15:25:36\",\"user_sts\":0,\"pay_fee\":0,\"balance\":12663,\"real_pro_fee\":0,\"cust_id\":21010065637513,\"user_id\":40200075634383,\"total_late_fee\":0,\"total_usable_balance\":15663},\"errorMsg\":{\"orig_so_nbr\":\"20180917000037275503\",\"so_nbr\":210315111710324,\"finish_date\":\"2021-03-15 15:25:35\",\"result_code\":0}},\"success\":true}";JsonElement jsonEle = new JsonParser().parse(str);Map map = new HashMap();map.put("acct_id","00000000");map.put("asset_id","9999999");System.out.println(json.replaceJsonNode(jsonEle, map).toString());}
}

分享一个替换复杂json串中的节点值或者key-value值的方法相关推荐

  1. 认识Json本质 一个较复杂Json串的解析实例

    一.json概要 JSON(JavaScript Object Notation, JS 对象标记)-一种轻量级的数据交换标准(相对xml),独立于编程语言.具体以逗号分隔的key:value键值对的 ...

  2. Golang 从 Json 串中快速取出需要的字段

    Golang 从 Json 串中快速取出需要的字段 在 web 编程中很多情况下接口的数据是 json 格式,在我们拿到接口的 json 数据后如何方便地从中提取出需要的字段呢?我们可以自定义一个结构 ...

  3. java-记录一个子串在整串中出现的次数

    转载 :https://blog.csdn.net/best_xing/article/details/70244858 任务描述:  编写一个程序,记录一个子串在整串中出现的次数,例如记录子串&qu ...

  4. jmeter--正则提取json串中一个大括号对象里指定字段值的的另一个字段的值

    需要提取如图红框_id的值,整个返回里有多个类似的大括号对象: 里面的第一个id的值,但是整个json串不止这么一个,并且只能匹配quality_level是349的这个大括号里的第一个id的值.下面 ...

  5. python如何创建一个列表_在python中创建列表的最佳和/或最快方法

    在python中,据我所知,至少有3到4种方法来创建和初始化给定大小的列表: 简单循环append: my_list =[]fori inrange(50):my_list.append(0) 简单循 ...

  6. 将json字符串中数组节点转换为泛型list集合(gson)

    开发中需要将json中节点单独取出某个节点,解析获取数据,此处对json字符串节点中数组节点,转换为泛型list集合,使用gson. google的gson的pom文件和jar:gson 代码如下: ...

  7. 分享一个快速的Json(反)序列化开源项目 Jil

    我们不缺少JSON的序列化库,但我们缺少一个性能非常好的库,这对于网站来说非常重要.今天我发现了Jil. 他是开源的代码: https://github.com/kevin-montrose/Jil ...

  8. JSON解析中获取不存在的key

    1 . fastjson 在fastjson中有些getXXX方法 , 如getString , getInteger , getIntValue等 , 当调用getXXX方法时 , 如果传入的key ...

  9. mysql获取一个表的数据作为值插入_请问如何在mysql中得到一个即将插入数据表中的那条数据的id值(id自增长)?...

    我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的. 但在多线程情况下,就不行了. 下面 ...

最新文章

  1. FLUSH TABLES WITH READ LOCK
  2. 【 FPGA 】UltraFast设计方法学:时序收敛之时序约束基本准则
  3. 第一次作业--四则运算题目生成程序
  4. 伟大的通信使者——JSON(JavaScript版本)
  5. 2.携程架构实践 --- 移动大前端
  6. PV操作经典问题通解
  7. 智慧课堂实时监测系统
  8. 清华梦的粉碎—写给清华大学的退学申请
  9. 第2章 Spring Boot实践,开发社区登录模块(上)
  10. 模拟频率、数字频率、模拟角频率之间的关系
  11. 推荐一个非常好的IOS编程技巧网站
  12. Appium(Python)测试混血App
  13. 国内自动化、计算机部分期刊排名
  14. markdown 合并单元格、表格内换行
  15. iOS应用架构谈 网络层设计方案--RTNetworking
  16. centos发现网络连不上了,重启网络服务报错“systemctl status network.service” and “journalctl -xe” for details. [失败]
  17. 【java】drools入门之LHS和RHS语法
  18. FCC--Chunky Monkey(数组分组)和Slasher Flick(截断数组)
  19. 亚马逊运营选品时的几个小技巧,爆款日出千单
  20. APP使用相机CameraX

热门文章

  1. 关于数字化校园建设的一些思考
  2. MOXA NPort5650 串口设备联网服务器
  3. 初学安全课程的第一个漏洞 ms17-010
  4. DCOM服务启动失败的解决办法
  5. matlab交流调压调速课本,双闭环交流调速系统的设计及MATLAB仿真
  6. 3D版CenterNet: CenterPoint,小修小改也能刷爆榜单
  7. pkpm服务器修改数据,[转载]pkpm参数不满足调整方法
  8. C语言程序设计第三版苏小红5.7键盘输入字符,字母大写改小写,小写改大写,并输出ASCII码
  9. Android WebView加载网页,图片等元素宽度大小不兼容手机屏幕的宽度
  10. 二手车保值率分析预测