从 JSONPath 数组的不同对象中查询具有特定值的键

{

  "dataObject": [

    {

      "id": 263626,

      "role": {

        "id": 12054,

        "name": "Edit",

        "description": ""

      },

      "resource": {

        "id": 5756,

        "type": "resource"

      }

    },

    {

      "id": 263364,

      "role": {

        "id": 12054,

        "name": "Edit",

        "description": ""

      },

      "resource": {

        "id": 5728,

        "type": "resource"

      }

    }

  ]

}

我有一个 JSON 对象,如下所示。我需要从中提取 json 对象dataObjecthasname:Edit和 id: 5756。如何使用 JSON 路径实现此目的?试过$..[?(@.name="Edit", @.id=5756)]哪个没用。


Java代码:


JsonPath.parse(json).read("$..[?(@.name='Edit'), (@.id=5756)]")


慕斯王
浏览 124回答 1
1回答

德玛西亚99

尝试使用父对象名称和逻辑运算符AND。结果路径将是$..[?((@.resource.id == 5756) && (@.role.name == 'Edit'))].它在单元测试中对我有用com.jayway.jsonpath:json-path:2.4.0@Testpublic void testParse() {    String json = "{\n" +            "  \"dataObject\": [\n" +            "    {\n" +            "      \"id\": 263626,\n" +            "      \"role\": {\n" +            "        \"id\": 12054,\n" +            "        \"name\": \"Edit\",\n" +            "        \"description\": \"\"\n" +            "      },\n" +            "      \"resource\": {\n" +            "        \"id\": 5756,\n" +            "        \"type\": \"resource\"\n" +            "      }\n" +            "    },\n" +            "    {\n" +            "      \"id\": 263364,\n" +            "      \"role\": {\n" +            "        \"id\": 12054,\n" +            "        \"name\": \"Edit\",\n" +            "        \"description\": \"\"\n" +            "      },\n" +            "      \"resource\": {\n" +            "        \"id\": 5728,\n" +            "        \"type\": \"resource\"\n" +            "      }\n" +            "    }\n" +            "  ]\n" +            "}";    DocumentContext parse = JsonPath.parse(json);    Object read = parse.read("$..[?((@.resource.id == 5756) && (@.role.name == 'Edit'))]");    assertNotNull(read);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java