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

前言

最近在开发一个自动化回归接口的工具,需要将调用接口返回的出参报文和预设的报文进行比对,但是出参中有一些比如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());
    }
}

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值