【问题标题】:How to deserealize JSON array into HashMap using jackson?如何使用杰克逊将 JSON 数组反序列化为 HashMap?
【发布时间】:2015-07-11 18:35:59
【问题描述】:

我有这样的 JSON 对象:

 "stream_server":{  
         "value":"11",
         "list":[  
            {  
               "id":"11",
               "desc":"EU West"
            },
            {  
               "id":"4",
               "desc":"EU Sud + GB"
            },
            {  
               "id":"9",
               "desc":"DE 1"
            },
            {  
               "id":"12",
               "desc":"DE 2"
            }
         ]
      }

我为 Jackson 库生成了代码,其中“列表”显示为对象的 ArrayList

public class StreamServer {
    @JsonProperty("value")
    private String value;
    @JsonProperty("list")
    private java.util.HashMap<String, String> serverList = new HashMap<>();
}

我可以像上面那样将其反序列化为 Java 对象吗?

我正在寻找示例代码。

【问题讨论】:

  • @GoodBadandUgly,感谢您的链接。也许它会帮助我。但这绝对不是我的情况。例如,“id”的值“11”是键,“desc”的值“EU West”是我的HashMap的值。在您的示例中,“id”是键,“11”是值,“desc”是键,“EU West”是值,依此类推。希望,这听起来不太复杂
  • 我在这里找到了答案:stackoverflow.com/questions/20105723/…
  • 次要细节,但您的 JSON 无效。要么用大括号括起来,要么去掉 stream_server 部分。
  • @habsq 抱歉,它是复杂对象的一部分

标签: java json jackson


【解决方案1】:

你可以反序列化成。

public static  class StreamServer {
    @JsonProperty("value")
    private String value;

    @JsonProperty("list")
    private List<Server> serverList;

}

public static class Server {
    @JsonProperty("id")
    private String id;

    @JsonProperty("desc")
    private String desc;
}

要阅读的杰克逊代码如下所示:

    ObjectMapper m  = new ObjectMapper();
    StreamServer s = m.readValue(json, StreamServer.class);

【讨论】:

  • 我明白了,但是 List 是多余的。
  • 在您的 JSON 结构中,list 是一个列表,而不是一个 Map,并且 list 的每个成员都是一个 Map(或一个 json 对象 - 取决于您如何看待它)。
  • 那么,我不能用“id”的值作为HashMap的键,用“desc”的值作为HashMap的值吗?
  • 更新了答案——如果你可以使用另一个类而不是 Map 来表示服务器,那么事情会更简单
  • 谢谢,我已经用自动工具做了。还有和我一样的问题:stackoverflow.com/questions/20105723/…
猜你喜欢
  • 2021-05-16
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
相关资源
最近更新 更多