gpt4 book ai didi

java - 递归比较两个json节点并在java中打印不同的值

转载 作者:行者123 更新时间:2023-12-01 21:36:39 25 4
gpt4 key购买 nike

我想比较java中的两个大json节点,如果它们不同,我需要打印两个节点中不同的值。如果节点不相等,JsonNode.equals() 返回 false,但它不会告诉特定的不同值。

谢谢。

代码示例:

    import org.codehaus.jackson.JsonNode; 
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.util.JSONPObject;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;


public class TestJsonComp
{
static String json = "{\n" +
" \"d\" :\n" +
" {\n" +
" \"results\" :\n" +
" [\n" +
" {\n" +
" \"__metadata\" :\n" +
" {\n" +
" \"id\" : \" ##ServiceRoot##/Submit('##RequisitionUniqueName##')\",\n" +
" \"uri\" : \"##ServiceRoot##/Submit('##RequisitionUniqueName##')\",\n" +
" \"type\" : \".submitResponse\",\n" +
" \"etag\" : \"W/\\\"##RequisitionUniqueName##\\\"\"\n" +
" },\n" +
" \"status\" : \"ERROR\",\n" +
" \"uniqueName\" : \"##RequisitionUniqueName##\",\n" +
" \"errors\" :\n" +
" {\n" +
" \"results\" :\n" +
" [\n" +
" {\n" +
" \"__metadata\" :\n" +
" {\n" +
" \"id\" : \"##ServiceRoot##/RequisitionErrors(0)\",\n" +
" \"uri\" : \"##ServiceRoot##/RequisitionErrors(0)\",\n" +
" \"type\" : \".errors\",\n" +
" \"etag\" : \"W/\\\"0\\\"\"\n" +
" },\n" +
" \"id\" : 0,\n" +
" \"error_description\" : \"title.\"\n" +
" },\n" +
" {\n" +
" \"__metadata\" :\n" +
" {\n" +
" \"id\" : \"##ServiceRoot##/RequisitionErrors(1)\",\n" +
" \"uri\" : \"##ServiceRoot##/RequisitionErrors(1)\",\n" +
" \"type\" : \".errors\",\n" +
" \"etag\" : \"W/\\\"1\\\"\"\n" +
" },\n" +
" \"id\" : 1,\n" +
" \"error_description\" : \"Line item 1 must be set.\"\n" +
" }\n" +
" ]\n" +
" }\n" +
" }\n" +
" ]\n" +
" }\n" +
"}";

static String jsonCompare = "{\n" +
" \"d\" :\n" +
" {\n" +
" \"results\" :\n" +
" [\n" +
" {\n" +
" \"__metadata\" :\n" +
" {\n" +
" \"id\" : \"##ServiceRoot##/Submit('##RequisitionUniqueName##')\",\n" +
" \"uri\" : \"##ServiceRoot##/Submit('##RequisitionUniqueName##')\",\n" +
" \"type\" : \".submitResponse\",\n" +
" \"etag\" : \"W/\\\"##RequisitionUniqueName##\\\"\"\n" +
" },\n" +
" \"status\" : \"ERROR\",\n" +
" \"uniqueName\" : \"##RequisitionUniqueName##\",\n" +
" \"errors\" :\n" +
" {\n" +
" \"results\" :\n" +
" [\n" +
" {\n" +
" \"__metadata\" :\n" +
" {\n" +
" \"id\" : \"##ServiceRoot##/RequisitionErrors(0)\",\n" +
" \"uri\" : \"##ServiceRoot##/RequisitionErrors(0)\",\n" +
" \"type\" : \".errors\",\n" +
" \"etag\" : \"W/\\\"0\\\"\"\n" +
" },\n" +
" \"id\" : 0,\n" +
" \"error_description\" : \"title.\"\n" +
" },\n" +
" {\n" +
" \"__metadata\" :\n" +
" {\n" +
" \"id\" : \"##ServiceRoot##/RequisitionErrors(1)\",\n" +
" \"uri\" : \"##ServiceRoot##/RequisitionErrors(1)\",\n" +
" \"type\" : \".errors\",\n" +
" \"etag\" : \"W/\\\"1\\\"\"\n" +
" },\n" +
" \"id\" : 1,\n" +
" \"error_descriptio\" : \"Line item 1 must be set.\"\n" +
" }\n" +
" ]\n" +
" }\n" +
" }\n" +
" ]\n" +
" }\n" +
"}";


public static void main (String args []) throws IOException, JSONException
{
ObjectMapper objectMapper = new ObjectMapper();
JsonNode n1 = objectMapper.readTree(json);
JsonNode n2 = objectMapper.readTree(jsonCompare);
System.out.print(n1.equals(n2));

}


}

最佳答案

检查Parse a JSON Object With an Undetermined Amount of Child Nodes .

可以获得一个节点的子节点列表。然后循环子节点,获取键/值并使用键比较第二个节点的每个元素。

关于java - 递归比较两个json节点并在java中打印不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36888710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com