![]()
![]()
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
/**
* @author 测试
*
*/
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}}]
以上内容来源于百科书,可以关注我了解更多.