如何使用 Java 访问 JSON 中的三重嵌套值?

How do I access triple nested values in JSON using Java?

我正在尝试访问下面 JSON 中的“文本”值并使用这些值创建一个 ArrayList。我将如何处理?我正在尝试使用 com.fasterxml.jackson.

{
    "searchApiFormatVersion": "1.0",
    "searchName": "SalaryAccessRole",
    "description": "",
    "totalRowCount": "2",
    "returnedRowCount": "2",
    "startingReturnedRowNumber": "1",
    "basetype": "Person",
    "columnCount": "1",
    "columnHeaders": [
        {
            "text": "EMPLID",
            "dataType": "string"
        }
    ],
    "resultSet": {
        "rows": [
            {
                "values": [
                    {
                        "text": "2270127",
                        "dataType": "string",
                        "columnHeader": "EMPLID"
                    }
                ]
            },
            {
                "values": [
                    {
                        "text": "1050518",
                        "dataType": "string",
                        "columnHeader": "EMPLID"
                    }
                ]
            }
        ]
    }
}

我已成功使用它来搜索名称,但我正在尝试获取 resultSet->rows->values->text 下的文本。

JsonNode salaryExcludePersonNode = new ObjectMapper().readTree(sourceJson);
String person = salaryExcludePersonNode.get("searchName").textValue();//this works
String person2 = salaryExcludePersonNode.get("resultSet")
                .get("rows")
                .get("values")
                .get("text")
                .textValue());//this says that com.fasterxml.jackson.databind.JsonNode.get(String)  is null

我知道您将这个问题标记为 Jackson 问题,但我认为 JSONPath 可能很适合这里。

JSONPath 库可作为 Maven 依赖项使用:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.7.0</version>
</dependency>

对于您问题中的 JSON,可以使用单个 JSON 路径选择器选择所有“文本”值:

$.resultSet.rows..text

$ - 从 JSON.

的根开始

.resultSet.rows - 导航到 rows 数组。

..text - 递归查找所有 text 条目。

结果自动添加到Java List:

String jsonAsString = "{...}";
List<String> textList = JsonPath.read(jsonAsString, "$.resultSet.rows..text");

您也可以直接从 java.io.File 读取:

File jsonFile = "/your/path/to/file.json";
List<String> textList = JsonPath.read(jsonFile, "$.resultSet.rows..text");

该列表将填充 2 个条目:

2270127
1050518

参考文献:

JSONPath syntax overview

JavaDocs