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

标签 java 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 对象。我需要从 dataObject 中提取 json 对象,该对象具有 name:Edit 和 id:5756。 如何使用 JSON 路径实现此目的? 尝试了 $..[?(@.name="Edit", @.id=5756)] 但没有成功。

Java代码:

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

最佳答案

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

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

它在单元测试中对我有用 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);
}

关于java - 从 JSONPath 数组的不同对象中查询具有特定值的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57985530/

相关文章:

java - 从命令行运行时出现 NoClassDefFoundError

java - 搜索类型 JSONPath

java - 放心。是否可以从响应 json 中提取 JSONObject/JSONArray?

java - 如何使用 JSONPath 获取根级别 JSON 对象的键/名称?

java - Swing 应用程序不显示某些按钮

java - 除了管理用户 session 之外,CDI 在 Java SE/EE 中还有什么用途?

Java:拆分以逗号分隔的字符串但忽略括号中的逗号

java - 结合 JavaFX 3D 形状看起来透明

java - 如何从 Java 中的 Unirest 响应中获取原始 JSON 文本

java - Jayway JsonPath查询获取所需的json格式