思路是写一个递归函数
1. 先找key,
2. 找不到的话去value里面找。value里面分三种情况,
- 1.value是json类型就继续找
- 2.如果是数组,就遍历之后递归
- 3,如果是普通类型就continue
public static String analyseJson(String jsonData, String oldKey, String newKey) {
JSONObject res = new JSONObject();
JSONObject jsonObject = JSON.parseObject(jsonData);
//1. 首先在jsonObject里面找得到key,则直接替换;
if (jsonObject.containsKey(oldKey)) {
if (!StringUtils.isEmpty(newKey)) {
res.put(newKey, jsonObject.get(oldKey));
}
return JSON.toJSONString(res);
}else {
// 2. 解析value;分三种类型。
for (Map.Entry entry : jsonObject.entrySet()) {
Object value = entry.getValue();
//if:如果value是json类型继续递归解析; else if数组; else基本类型,则continue;
if (value instanceof JSONObject) {
return analyseJson(String.valueOf(value), oldKey, newKey);
} else if (value instanceof JSONArray) {
JSONArray objArray = (JSONArray)value;
for (int i = 0; i < objArray.size(); i++) {
return analyseJson(String.valueOf(objArray.get(i)),oldKey,newKey);
}
} else {
continue;
}
}
return res.toJSONString();
}
}
测试:
public static void main(String[] args) {
String test = "{n" +
" "key_as_string": "2022-06-24T08:00:00.000+08:00",n" +
" "key": 1656028800000,n" +
" "doc_count": 13486,n" +
" "avgValue": {n" +
" "value1": 81.9979979237728n" +
" },n" +
" "lastValue": {n" +
" "value2": 19n" +
" }n" +
" }n";
System.out.println("解析前:"+test);
String s = analyseJson(test, "value1", "ycccc");
System.out.println("解析后:"+s);
}
测试二
String test2 = "{n" +
" "error": 0,n" +
" "status": "success",n" +
" "results": [n" +
" {n" +
" "currentCity": "青岛",n" +
" "index": [n" +
" {n" +
" "title": "穿衣",n" +
" "zs": "较冷",n" +
" "tipt": "穿衣指数",n" +
" "des": "建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。"n" +
" },n" +
" {n" +
" "title": "紫外线强度",n" +
" "zs": "中等",n" +
" "tipt": "紫外线强度指数",n" +
" "des": "属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。"n" +
" }n" +
" ]n" +
" }n" +
" ]n" +
"}";
System.out.println("解析前:"+test2);
OK!



