【问题标题】:How to deserialize JSON to Map object using Jackson?如何使用 Jackson 将 JSON 反序列化为 Map 对象?
【发布时间】:2018-01-26 05:08:23
【问题描述】:

我有一个带有标签的 JSON,其中包含我想读入 Java POJO 中的映射的任意键和值类型。该映射将是 JsonValue 或 JsonNode 之类的字符串。我正在使用对象映射器来解析 json。

有人对如何设置我的 POJO 以与 Jackson 一起完成此任务有任何建议吗?或者有更好的方法来解决这个问题?

Json 示例:

{
    "thing": "name",
    "params": {
        "foo": 45.5,
        "key": "value"
    }
}

映射方法:

ObjectMapper objectMapper = new ObjectMapper();
MyClasst = objectMapper.readValue(json, MyClass.class);

我的 POJO:

public class MyClass {
    private String thing;
    private Map<String, SOMETHING> params;

    public String getThing(){
        return thing;
    }

    public void setThing(String thing) {
        this.thing = thing;
    }

    public Map<String, SOMETHING> getParams(){
        return params;
    }

    public void setParams(Map<String, SOMETHING> params) {
        this.params = params;
    }
}

【问题讨论】:

  • "foo": 45.5 这是什么意思?
  • 这只是为了表明params字段有多个键,每个键都有任意值类型(foo是双精度,key是字符串)。

标签: java json dictionary jackson


【解决方案1】:

假设您的密钥始终是 String 类型,用于跟随 JSON,

"params": {
        "foo": 45.5,
        "key": "value"
    }

您应该使用您的地图值Object,因为值可以是StringDouble 或其他任何值。

private Map<String, Object> params;

【讨论】:

  • 我认为这可行。我犹豫要不要这样做,因为其中一些值可能是 json 对象。但是经过测试,看起来那些会变成 HashMaps,继续循环。谢谢。
  • @user3499973 是的,顺便说一句,Object 是超类,所以你不会对任何对象有任何问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2014-02-12
  • 1970-01-01
相关资源
最近更新 更多