Java如何访问JSON内部子数组

Sup*_*Cow 5 java json jackson

我有一个 JSON,它的结构与下面的(文章结尾)相似。我试图从文件中读取它,然后提取一些信息。我想得到“时代”的孩子并用它做点什么。我试过使用 json.simple 和一些 jackson 的东西,但我不断收到转换/类型错误。我很困:/

首先我读入文件,它似乎被正确捕获:

JSONParser parser = new JSONParser();
JSONObject data = (JSONObject) parser.parse(new FileReader("test.json"));
Run Code Online (Sandbox Code Playgroud)

然后我尝试了这个:Java JSONObject get children but get errorsorg.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject

我想要(认为是我想要的?)做的是创建一个时代的 JSON,然后从那里我可以列出时间/对它们进行各种操作。或者也许最好的方法是使用 ObjectMapper 并将其映射到匹配的对象?

{
    "id": "ca1b57be-6c38-4976-9050-f9a95a05a38d",
    "name": "some name",
    "results": [
        {
            "name": "https://st-dev.aexp.com/smart-test/v1/test/test",
            "tests": {
                "name": "Body matches string",
                "status": "pass",
                "Response time is less than 200ms": true
            },
            "testPassFailCounts": {
                "Body matches string": {
                    "pass": 100,
                    "fail": 0
                },
                "Response time is less than 200ms": {
                    "pass": 100,
                    "fail": 0
                }
            },
            "times": [
                "48",
                "25",
                "25",
                "28",
                "24",
                "24",
                "35",
                "29",
                "41",
                "28",
                "28",
                "24",
                "31",
                "28",
                "25",
                "27",
                "23",
                "28",
                "44",
                "29",
                "25",
                "23",
                "44",
                "28",
                "22"
            ]
        }
    ]       
}
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助!

Mic*_*nic 0

可能有更好的方法来做到这一点,但使用杰克逊的ObjectMapper,这是一个解决方案:

String json = readJSON(); // <- read the JSON from somewhere as a plain String
Map<String, Object> jsonDocument = new ObjectMapper()
            .readValue(json, new TypeReference<Map<String, Object>>() {});

List<Object> resultsList = (List<Object>) jsonDocument.get("results");
Map<String, Object> resultsMap = (Map<String, Object>) resultsList.get(0);
List<Integer> times = (List<Integer>) resultsMap.get("times");

// process the times
Run Code Online (Sandbox Code Playgroud)

基本上,您的示例 JSON 仅概括为 a Map<String, Object>,然后您需要逐个元素对其进行处理,检查文档并添加相应的类转换(MapList)。Jackson 将 JSON 的名称-值对({}在文档中用 s 表示)转换为Maps,将数组(用[]s 表示)转换为Lists。上面的代码片段假设 的值results始终是单元素列表。