为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯王 2023-08-04 16:28:23
{  "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)]")
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

尝试使用父对象名称和逻辑运算符AND。结果路径将是


$..[?((@.resource.id == 5756) && (@.role.name == 'Edit'))].


它在单元测试中对我有用com.jayway.jsonpath:json-path:2.4.0


@Test

public 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);

}


查看完整回答
反对 回复 2023-08-04
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信