任意替换(修改)JSON数据的key、values值

1、概述

再做实时数据清洗的时候需要对json数据的key,value做一定的修改,此方法直接对json任意字段进行修改。

2、代码

依赖包

com.alibaba fastjson 1.2.47

代码部分
import com.alibaba.fastjson.JSONArray;

import com.alibaba.fastjson.JSONObject;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

public class JSONUtil_1021 {

public static void main(String[] args) {

//输入的json字符串

        String jsonStr ="{\"user\":{\"name\":\"张三\",\"sex\":\"男\",\"hobby\":[{\"motion\":\"足球\",\"desc\":\"任性\"},{\"game\":\"英雄联盟\",\"desc\":\"就是这么任性\"}]}}";

        System.out.println("原格式的json 》》"+jsonStr);

        //替换对应的key的规则

        Map keyMap =new HashMap<>();

        keyMap.put("desc", "描述");

        //替换对应的value的规则

        Map valueMap =new HashMap<>();

        valueMap.put("男", "0");

        valueMap.put("女", "1");

        JSONObject jsonObj = JSONUtil_1021.changeJsonObj(JSONObject.parseObject(jsonStr),keyMap,valueMap);

        System.out.println("换值结果 》》 " + jsonObj.toString());

    }

/**

* 实现json数据按照替换规则进行替换

    * @param jsonObj  原始json数据

    * @param keyMap  key替换规则

    * @param valueMap value替换规则

    * @return 替换后的josn数据

*/

    public static JSONObjectchangeJsonObj(JSONObject jsonObj,Map keyMap,Map valueMap) {

JSONObject resJson =new JSONObject();

        Set keySet = jsonObj.keySet();

        for (String key : keySet) {

//改变json数据的key值

            String resKey = keyMap.get(key) ==null ? key : keyMap.get(key);

            try {

JSONObject jsonobj1 = jsonObj.getJSONObject(key);

                resJson.put(resKey, changeJsonObj(jsonobj1, keyMap,valueMap));

            }catch (Exception e) {

try {

JSONArray jsonArr = jsonObj.getJSONArray(key);

                    resJson.put(resKey, changeJsonArr(jsonArr, keyMap,valueMap));

                }catch (Exception x) {

//不改变value值: resJson.put(resKey, jsonObj.get(key));

//改变json的values值

                    resJson.put(resKey, jsonvalues(jsonObj.get(key).toString(),valueMap));

                }

}

}

return resJson;

    }

//替换Json的value值

    public static Stringjsonvalues(String oldValue,Map valueMap){

String resValue = valueMap.get(oldValue) ==null ? oldValue : valueMap.get(oldValue);

        return resValue;

    }

public static JSONArraychangeJsonArr(JSONArray jsonArr,Map keyMap,Map valueMap) {

JSONArray resJson =new JSONArray();

        for (int i =0; i < jsonArr.size(); i++) {

JSONObject jsonObj = jsonArr.getJSONObject(i);

            resJson.add(changeJsonObj(jsonObj, keyMap,valueMap));

        }

return resJson;

    }

}

本人技术有限,欢迎朋友们指点。

你可能感兴趣的:(任意替换(修改)JSON数据的key、values值)