小玩意 - JSON 快速克隆的另一种形式
Posted 放羊的牧码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小玩意 - JSON 快速克隆的另一种形式相关的知识,希望对你有一定的参考价值。
- 起始节点 - 数组“[]”
- 起始节点 - 对象“”
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
/**
* @author Lux Sun
* @date 2021/12/28
*/
public class Test
public static String jsonObjStr = "\\"k.1\\":\\"123\\",\\"k.2\\":\\"k.2.1\\":10,\\"k.2.2\\":[1,2,3.4],\\"key\\":11";
public static String jsonArrStr = "[\\"k.3.4\\",\\"k.1\\":\\"123\\",\\"k.2\\":\\"k.2.1\\":10,\\"k.2.2\\":[1,2,3.4],\\"key\\":11]";
private Object parse(String jsonStr)
JSONObject jsonObj = new JSONObject();
JSONObject newJsonObj = new JSONObject();
Object obj = JSON.parse(jsonStr);
if (obj instanceof JSONArray)
jsonObj.put("jsonList", obj);
else if (obj instanceof JSONObject)
jsonObj = (JSONObject) obj;
dfs(jsonObj, newJsonObj);
if (newJsonObj.containsKey("jsonList"))
return newJsonObj.get("jsonList");
return newJsonObj;
private void dfs(Object obj, Object newObj)
if (obj == null)
return;
if (obj instanceof JSONObject)
JSONObject jsonObject = (JSONObject) obj;
JSONObject newJsonObject = (JSONObject) newObj;
jsonObject.forEach((key, value) ->
// 避免“.”号本来就在 Key 当中, 具有业务含义
String newKey = key.replace(".", "#");
Object newValue = getNewValue(value);
if (newValue == null)
newJsonObject.put(newKey, value);
else
newJsonObject.put(newKey, newValue);
dfs(value, newJsonObject.get(newKey));
);
else if (obj instanceof JSONArray)
JSONArray jsonArray = (JSONArray) obj;
JSONArray newJsonArray = (JSONArray) newObj;
for (int i = 0; i < jsonArray.size(); i++)
Object newValue = getNewValue(jsonArray.get(i));
if (newValue == null)
newJsonArray.add(jsonArray.get(i));
else
newJsonArray.add(newValue);
dfs(jsonArray.get(i), newJsonArray.get(i));
private Object getNewValue(Object obj)
if (obj instanceof JSONObject)
return new JSONObject();
else if (obj instanceof JSONArray)
return new JSONArray();
return null;
public static void main(String[] args)
// Object result = new Test().parse(jsonObjStr);
Object result = new Test().parse(jsonArrStr);
System.out.println(JSON.toJSONString(result, SerializerFeature.WriteMapNullValue));
- 输出
// 对象节点
"k#1":"123","k#2":"k#2#1":10,"k#2#2":[1,2,3.4],"key":11
// 数组节点
["k.3.4","k#1":"123","k#2":"k#2#1":10,"k#2#2":[1,2,3.4],"key":11]
以上是关于小玩意 - JSON 快速克隆的另一种形式的主要内容,如果未能解决你的问题,请参考以下文章