前言

最近在开发一个自动化回归接口的工具,需要将调用接口返回的出参报文和预设的报文进行比对,但是出参中有一些比如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. 【直播】黎佳佳:音频数据分析以及特征提取
  2. 操作系统学习笔记:进程同步
  3. 电脑键盘功能介绍_远程操控软件介绍
  4. python查看函数调用栈
  5. 《神策军》第四期来袭!
  6. 抢先报名丨2021云上架构与运维峰会将于11月6日在北京举办,五大精彩看点不容错过
  7. Python附带了大量的库 - 初学者如何学起
  8. 安卓程序员都懂:如何用Espresso对UI界面测试?
  9. Bootstrap3轮番插件的选项
  10. 从JDK源码角度看Short
  11. 如何调用畅捷通接口_用友金蝶多组织多账套的不同数据如何合并?
  12. TypeError: Cannot read property ‘forceUpdate‘ of undefined
  13. 多维灰色预测模型的一点改进
  14. chrome浏览器debug vue项目,跳过vue源码
  15. matlab编程求卫星轨道长度,GPS卫星轨道计算及其MATLAB仿真.pdf
  16. 利用python实现简单的爬虫,爬百度文库相关词条信息
  17. 【JSTL】choose标签
  18. 蘑菇街teamtalk简介
  19. 日语输入法无法使用的解决方法
  20. 解决从k8s.gcr.io拉取镜像失败问题

热门文章

  1. 排线电机运行控制(梯形图状态机编程)
  2. android log输出keycode,如何在android中获取keyCode
  3. Pedestrian Attribute Recognition
  4. Java JMM 和可见性问题
  5. 不可或缺的十种WebSphere MQ SupportPac
  6. 选购集成墙面时这些顾虑有必要吗?
  7. 杰理之手表UI页面大纲【篇】
  8. 17开年第一篇Activity之间传递ListT 以及T对象类型数据的方法
  9. Python学习七(线程)
  10. 21 张思维导图,柠檬哥肝了半个月的「后端技术学习路线」长啥样?