Java Jackson 解析动态 JSON 对象

标签 java json jackson

处理具有以下结构的 JSON 对象的最佳方法是什么:

{
  "Parameters": {
    "0": {
      "some key 0": "some value 0"
    },
    "1": {
      "some key 1": "some value 1"
    },
    "2": {
      "some key 2": "some value 2"
    },
    ....
    "n": {
      "some key n": "some value n"
    }
}

它包含从 0 到 n(例如 100)的属性,每个属性都是一个具有单个键值的对象。看起来所有的键都不一样。

是否可以将其转换为Parameter列表,其中每个参数都有下一个结构:

public class Parameter {
    String key;
    String value;
}

在 jackson 中处理这个问题的最佳方法是什么?

最佳答案

如果键是动态的,那么我们可以使用 @JsonAnySetter 注释。

你可以尝试这样的事情:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);

Parameters parameters = mapper.readValue(jsonData, Parameters.class);

Parameter 类的内容是:

@JsonRootName("Parameters")
class Parameters {
    private List<Map<String, String>> parameters = new ArrayList<Map<String, String>>();

    @JsonAnySetter
    public void setDynamicProperty(String name, Map<String, String> map) {
        parameters.add(map);
    }

    public List<Map<String, String>> getParameters() {
        return parameters;
    }

    public void setParameters(List<Map<String, String>> parameters) {
        this.parameters = parameters;
    }

}

关于Java Jackson 解析动态 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42294823/

相关文章:

java - 在 Eclipse 中选择多段文本

json - 使用d3.json导入本地json文件不起作用

java - 运行时的部分 JSON 序列化(用于 RESTful 查询)

java - 打开的图像不出现

java - Spring MVC java邮件IMAP,如何在thymeleaf中显示通过表单收到的电子邮件列表?

java - 基于 JComboBox 选择打开新框架

PHP:json_encode() 不显示多维数组的任何内容

c# - Newtonsoft Json反序列化报错

java - 自定义MonetaryAmount JSR354/mo​​neta的Databind Json序列化格式

java - 使用 Jackson JSON Mapper 在 JSON 到 POJO 之间映射时出现 400 错误请求