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;
}
}
本人技术有限,欢迎朋友们指点。