java 代码 ,多层json串比较
时间: 2024-04-15 22:27:51 浏览: 98
JSON格式转换的jar包,com.google.gson,com.alibaba.fastjson
在Java中比较多层的JSON字符串可以使用JSON库(如Jackson、Gson)来实现。以下是一个使用Jackson库进行多层JSON比较的示例代码:
```java
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class JsonComparator {
public static void main(String[] args) throws IOException {
String json1 = "{\"name\": \"John\", \"age\": 30, \"address\": {\"city\": \"New York\", \"state\": \"NY\"}}";
String json2 = "{\"age\": 30, \"name\": \"John\", \"address\": {\"state\": \"NY\", \"city\": \"New York\"}}";
ObjectMapper mapper = new ObjectMapper();
JsonNode tree1 = mapper.readTree(json1);
JsonNode tree2 = mapper.readTree(json2);
boolean isEqual = compareJson(tree1, tree2);
if (isEqual) {
System.out.println("两个JSON串相等");
} else {
System.out.println("两个JSON串不相等");
}
}
public static boolean compareJson(JsonNode node1, JsonNode node2) {
if (node1.equals(node2)) {
return true;
}
if (node1.isObject() && node2.isObject()) {
if (node1.size() != node2.size()) {
return false;
}
for (String fieldName : node1.fieldNames()) {
JsonNode childNode1 = node1.get(fieldName);
JsonNode childNode2 = node2.get(fieldName);
boolean isEqual = compareJson(childNode1, childNode2);
if (!isEqual) {
return false;
}
}
return true;
}
if (node1.isArray() && node2.isArray()) {
if (node1.size() != node2.size()) {
return false;
}
for (int i = 0; i < node1.size(); i++) {
JsonNode childNode1 = node1.get(i);
JsonNode childNode2 = node2.get(i);
boolean isEqual = compareJson(childNode1, childNode2);
if (!isEqual) {
return false;
}
}
return true;
}
return false;
}
}
```
在上述代码中,我们使用了Jackson库来将JSON字符串解析为`JsonNode`对象,然后使用递归的方式进行JSON比较。`compareJson`方法会逐层比较JSON对象的字段和值,并处理嵌套的对象和数组。如果所有字段和值都相等,则返回`true`,否则返回`false`。
请注意,上述代码中的比较是基于JSON节点的内容是否完全相等。如果你希望忽略属性的顺序,可以将JSON对象转换为字符串,然后进行字符串比较。
阅读全文