【问题标题】:Json comparison which contains arrays using Java包含使用 Java 的数组的 Json 比较
【发布时间】:2017-10-31 09:02:42
【问题描述】:

Json1:

{
  "array1": [
    {
      "Name": "Xytrex Co.",
      "Description": "Industrial Cleaning Supply Company",
      "Account Number": "ABC15797531",
      "Address": {
        "Street": "st.road",
        "pin": "789723"
      }
    },
    {
      "Name": "XYZ Company",
      "Address": {
        "Street": "Peters road",
        "pin": "789700"
      }
    }
  ]
}

Json2:

{
  "array2":[
    {
      "Name": "Xytrex Co.",
      "Description": "Industrial Cleaning Supply Company",
      "Account Number": "ABC15797531",
      "Address": {
        "Street": "st.road",
        "pin": "789723"
      }
    },
    {
      "Name": "XYZ Company",
      "Description": "Domestic Cleaning Supply Company",
      "Address": {
        "Street": "Peters road",
        "pin": "789700"
      }
    }
  ]
}

我使用的Java代码:

JsonParser Parser = new JsonParser();

Object obj1 = Parser.parse(new 
FileReader("/home/cloudera/Desktop/SampleJson/src/JSON1.json"));

 Object obj2 = Parser.parse(new 
 FileReader("/home/cloudera/Desktop/SampleJson/src/JSON2.json"));

    JsonObject jsonObject1 = (JsonObject) obj1;
    JsonObject jsonObject2 = (JsonObject) obj2;


Set<Map.Entry<String, JsonElement>> entries1 = jsonObject1.entrySet();

Set<Map.Entry<String, JsonElement>> entries2 = jsonObject2.entrySet();

 for (Map.Entry<String, JsonElement> entry : entries1) {
        //System.out.println("FirstJson:"+entry.getKey());
    }

 for (Map.Entry<String, JsonElement> entry : entries2) {
        //System.out.println("SecondJson:"+entry.getKey());
    }

 if (jsonObject1.equals(jsonObject2)) {
        System.out.println("Success");
    } else {
        entries1.removeAll(entries2);
        //System.out.println("\n");
        System.out.println("Result:" + entries1);
    }

我必须使用 Java 比较两个包含数组的 json 文件,在 array1 中缺少“描述”我必须打印那个确切的键,而不是从头到尾打印整个 Json。在我的输出中,“描述”也不存在,但它并没有完全打印那个键,而是从头到尾打印。请帮我解决这个问题。

我得到的输出:

结果:[array1=[{"Name":"Xytrex Co.","Description":"Industrial Cleaning Supply Company","Account Number":"ABC15797531","Address":{"Street":" st.road","pin":"789723"}},{"Name":"XYZ Company","Address":{"Street":"Peters road","pin":"789700"}}]]

【问题讨论】:

  • 你到底卡在哪里了?
  • 我已经更新了我使用的代码,我无法打印出确切的密钥。请帮我打印确切的密钥。
  • 您打印了SetMap,因此您得到了您要求的输出..

标签: java


【解决方案1】:

这个库是处理 json 比较的干净方法。它还具有严格检查等比较模式。 http://jsonassert.skyscreamer.org/javadoc/org/skyscreamer/jsonassert/JSONCompare.html 对于您的用例,您可以检查 JSONCompareResult 解决了您的问题。

【讨论】:

  • org.skyscreamer.jsonassert.JSONCompare 这是开源的吗?如果不是,请在开源中推荐相同类型的库。
【解决方案2】:

我建议您使用https://github.com/eBay/json-comparison 库。 这个库基于 JsonAssert 项目,但提供了额外的功能 比如“排除路径”,处理顺序等等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多