关于 jackson 的 ObjectMapper

2017-05-03 16:06:45 +08:00
 esolve

下面代码中 变量 s 是一个 List<LinkedHashMap<String, Object>>类型 但是用 ObjectMapper 的时候

s = mapper.readValue(json, List.class);

只提供了一维上的类型,即 List.class 而不知道二维的类型,即 LinkedHashMap<String, Object> 而后是用

LinkedHashMap<String, Object> link = s.get(i);

得到 link

可是这种 implicit 的转换是怎么个机制? 是 ObjectMapper 的魔力,悄悄的已经转换好了?

public static void main(String[] args) {
    ObjectMapper mapper = new ObjectMapper();
    String json = "[{\"uid\":1000,\"uname\":\"xiao liao\",\"upwd\":\"123\",\"number\":12.0,\"isstudent\":true},{\"uid\":200,\"uname\":\"xiao mi\",\"upwd\":null,\"number\":0.0,\"isstudent\":false}]";
    List<LinkedHashMap<String, Object>> s = null;
    try {
        s = mapper.readValue(json, List.class);
    } catch (IOException e) {
        e.printStackTrace();
    }
    for (int i = 0; i < s.size(); i++) {
        LinkedHashMap<String, Object> link = s.get(i);
        Set<String> key = link.keySet();
        for (Iterator iterator = key.iterator(); iterator.hasNext(); ) {
            String string = (String) iterator.next();
            System.out.println(string + "==>" + link.get(string));

        }
        System.out.println("json:" + i + "" + s.get(i).toString());
    }
}
1392 次点击
所在节点    问与答
2 条回复
tsunli
2017-05-03 16:39:26 +08:00
mapper.readValue(json,new TypeReference<List<List<String,String>> (){});
esolve
2017-05-04 11:52:33 +08:00
@tsunli 但是上面用不是你说的这个方法,而是

readValue(String content, Class<T> valueType)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/358829

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX