将JSON与嵌套数组和jsons进行比较(数组顺序无关紧要)

时间:2014-11-05 17:02:11

标签: java arrays json

您好我正在尝试比较java中的两个json,每个键都可以包含一个json对象或json对象数组,并且每个键都可以是一个数组或json。

以下是Json的一个例子:

{
  "id": "123123asd123",
  "attributes": [
      {
         "name": "apps",
         "values": [
             "111",
             "222"
             ]
      },
      {
         "name": "city",
         "values": [
              "NY"
              ]
      }
    ]
}

我希望能够从这种类型中获得两个json,并在不关心数组顺序的情况下对它们进行比较。 正如你所看到的那样,关键'属性是一个json数组,所以如果我有另一个json就像这里的那个,并且带有关键城市的数组中的元素是在我希望测试通过的应用之前。 以及应用程序值内的数字我不在乎它是111,222还是222,111

如果有人知道任何外部java lib正在做那个生病的快乐听到。 或者任何想法如何手动实现这种比较?或者甚至是这种json的想法,并重新组织它,这样就可以很容易地与我分享。

1 个答案:

答案 0 :(得分:1)

看看这个库,她很酷,我整天都在使用它进行Webservice测试:

https://github.com/jayway/JsonPath

@Test
public void test() {
    String json = "{\n" +
            "  \"id\": \"123123asd123\",\n" +
            "  \"attributes\": [\n" +
            "      {\n" +
            "         \"name\": \"apps\",\n" +
            "         \"values\": [\n" +
            "             \"111\",\n" +
            "             \"222\"\n" +
            "             ]\n" +
            "      },\n" +
            "      {\n" +
            "         \"name\": \"city\",\n" +
            "         \"values\": [\n" +
            "              \"NY\"\n" +
            "              ]\n" +
            "      }\n" +
            "    ]\n" +
            "}";

    List<String> names = JsonPath.read(json, "$.attributes[*].name");
    for(String name : names) {
        //TODO assert that name is in other list from other json
    }