java - Jackson - 获取数组内的条目

标签 java json jackson

我有以下 JSON 源:

{
    "my-systems": [{
            "SYSTEM_A": [{
                    "parameter-name": "a_param1",
                    "parameter-display-name": "parameter 1",
                    "optional": "true"
                },
                {
                    "parameter-name": "a_param2",
                    "parameter-display-name": "Parameter 2",
                    "optional": "false"
                }
            ]
        },
        {
            "SYSTEM_B": [{
                    "parameter-name": "b_param1",
                    "parameter-display-name": "Parameter 1",
                    "optional": "true"
                },
                {
                    "parameter-name": "b_param2",
                    "parameter-display-name": "Parameter 2",
                    "optional": "false"
                }
            ]
        }
    ]
}

我尝试将其读入 Map<String, SystemParameter[]> 的 map 中.
我有这段代码,我真的不确定它是否是实现我的目标的最佳方法。

ArrayNode systemsArr = (ArrayNode)jsonDoc.get("my-systems");
if(systemsArr!= null && !systemsArr.isEmpty()){
    for(JsonNode systemNode : systemsArr ){
        ObjectNode systemObj = (ObjectNode)systemNode;

        System.out.println(systemObj .textValue());
    }
}

这是一种有效的方法吗?如何获取系统名称(SYSTEM_A、SYSTEM_B)并将其中包含的参数转换为参数对象数组?

最佳答案

您只需要在依赖项中使用 jackson-databind 和 jackson-annotations jar,您应该能够运行下面的代码

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JsonParsing {

    public static void main(String[] args) throws IOException {
        String jsonFilePath = "src/main/resources/source.json"; // JSON File Path
        MySystems mySystems = new ObjectMapper().readValue(new File(jsonFilePath),MySystems.class);

        Map<String,SystemParameter[]> outputMap = new HashMap<>();
        for (Map<String,List<SystemParameter>> map :mySystems.mySystems) {
            for (String key :map.keySet()) {
                outputMap.put(key, map.get(key).toArray(new SystemParameter[0]));
            }
        }
        System.out.println(outputMap);

    }
}

class MySystems {
    @JsonProperty("my-systems")
    List<Map<String,List<SystemParameter>>> mySystems;
}

class SystemParameter {
    @JsonProperty("parameter-name")
    String paramName;

    @JsonProperty("parameter-display-name")
    String paramDispName;

    @JsonProperty("optional")
    String optional;
}

关于java - Jackson - 获取数组内的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61369568/

相关文章:

java - 如何通过更改其中的一个特定字段来创建新的 json 字符串?

java - Jackson ObjectMapper 中的泛型静态方法

java - 将 JSON 反序列化为动态加载的类文件

json - 使用 PowerShell 更新 JSON 文件

java - Dropwizard 查看身份验证示例

java - 为什么一些开发人员以这种方式分配原始整数?整数 i = 0x0001

java - 如何在数组列表中应用基于单词的搜索操作?

java - 改造:将嵌套的 JSON 元素解析为列表

java - 使用 jackson-dataformat-xml 库将 XML 中的空标记转换为 java 属性

java - BST 的迭代方法