【问题标题】:How to deserialize json using objectMapper which has variable key如何使用具有可变键的 objectMapper 反序列化 json
【发布时间】:2021-06-08 07:14:58
【问题描述】:

我有一个这样的 json 文件。我想将其转换为具有 ID、SYMBOL、COUNT、SYMBOLINDEX 作为成员变量的自定义类的对象,我不能直接使用 objectMapper 执行此操作,因为键是变量“0”、“1”、“434”,它们将是整数,但是是可变的。它们也可能不是增量方式,例如它可以像“323”然后下一个可以像“5”那么我如何使用 objectMapper 将其转换为对象。任何代码建议将不胜感激

        "0": {
            "symbol": "B",
            "count": 2,
            "symbolIndex": [0, 0]
        },
        "1": {
            "symbol": "B",
            "count": 2,
            "symbolIndex": [0, 0]
        },
        "2": {
            "symbol": "B",
            "count": 2,
            "symbolIndex": [0, 0]
        }
    } ```

【问题讨论】:

  • 好吧,你总是可以使用通用的解析方法,它们基本上会产生地图(对象)和列表(数组)的层次结构。在我的脑海中,我想说你还应该能够传递一个类型引用来告诉杰克逊将 json 解析为Map<String, YourCustomClass>(另见this article)。如果一切都失败了,你也可以为第一级提供你自己的反序列化器,但我怀疑这真的有必要。
  • 是的,这就像一个魅力

标签: java json jackson deserialization objectmapper


【解决方案1】:

你可以试试...

public static void main(String[] args) {

    ObjectMapper map = new ObjectMapper();
    Map convertValue;
    try {
        convertValue = map.readValue(json, Map.class);
        System.out.println(convertValue.values());
    } catch (JsonMappingException e) {
        e.printStackTrace();
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    
}

你会得到如下结果: [{symbol=B, count=2, symbolIndex=[0, 0]}, {symbol=B, count=2, symbolIndex=[0, 0]}, {symbol=B, count=2, symbolIndex=[0 , 0]}]

【讨论】:

    猜你喜欢
    • 2019-05-06
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2017-01-24
    相关资源
    最近更新 更多