最近工作要对比两个 json 值是否相等,想到把具体路径两个做对比、值做对比。
导入包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
参考代码
private static void getJsonPath(String parent, Object data) {
if (data instanceof com.alibaba.fastjson.JSONObject) {
com.alibaba.fastjson.JSONObject dataJson = (com.alibaba.fastjson.JSONObject) data;
for (String key : dataJson.keySet()) {
Object child = dataJson.get(key);
String childKey = parent.isEmpty() ? key : parent + "." + key;
getJsonPath(childKey, child);
}
} else if (data instanceof com.alibaba.fastjson.JSONArray) {
com.alibaba.fastjson.JSONArray dataJson = (com.alibaba.fastjson.JSONArray) data;
for (int i = 0; i < dataJson.size(); i++) {
Object dataJso = dataJson.get(i);
getJsonPath(parent + "[" + i + "]", dataJso);
}
} else {
String path = "$." + parent;
System.out.println("预发-" + path + ":" + data);
}
}
执行测试类:
getJsonPath"", com.alibaba.fastjson.JSONObject.parseObjectjson;
效果图
工具类
<!-- https://github.com/wnameless/json-flattener
用做解析 json路径使用
-->
<dependency>
<groupId>com.github.wnameless.json</groupId>
<artifactId>json-flattener</artifactId>
<version>0.13.0</version>
</dependency>
直接调用
JsonFlattener.flattenAsMap(betaResponse.string());
//通过这样就能调用,把结果打印出来