我正在尝试从此API https://coinmarketcap.com/api/
中读取数据对于此端点https://api.coinmarketcap.com/v2/ticker/。 我在将数据字段映射到POJO时遇到问题。该字段实际上包含一个对象数组,但就json而言,它并没有真正定义为数组。
即。而不是
data: [{"id":"1","name":"some object"},{"id":"5","name":"another object"},...]
json已经命名了这样的字段
data: {"1":{"id":"1","name":"some object"},"5":{"id":"5","name":"another object"},...}
我可以使用
手动解析它objectMapper.readTree(new URL("https://api.coinmarketcap.com/v2/ticker/"));
但有没有办法自动将这些映射到List?
答案 0 :(得分:2)
您可以将其解析为地图(如@teppic所说),然后将地图值作为列表获取。
要反序列化到地图中,您可以看到此问题的答案:Deserializing into a HashMap of custom objects with jackson
TypeFactory typeFactory = mapper.getTypeFactory(); MapType mapType = typeFactory.constructMapType(HashMap.class, String.class, Theme.class); HashMap<String, Theme> map = mapper.readValue(json, mapType);
假设您有一个名为Item
的课程,其中包含id
和name
字段,您可以这样做:
String json = "{\"1\":{\"id\":\"1\",\"name\":\"some object\"},\"5\":{\"id\":\"2\",\"name\":\"another object\"}}";
ObjectMapper mapper = new ObjectMapper();
// create your map type <String, Item>
TypeFactory typeFactory = mapper.getTypeFactory();
MapType mapType = typeFactory.constructMapType(HashMap.class, String.class, Item.class);
HashMap<String, Item> map = mapper.readValue(json, mapType);
// get the list
List<Item> list = new ArrayList<Item>(map.values());
System.out.println(list);
输出:
[Item [id=1, name=some object], Item [id=2, name=another object]]
您的其他选项是自定义反序列化程序,或者如您所述阅读树。
答案 1 :(得分:-1)
试试这个
String json =&#34; [{\&#34; name \&#34;:\&#34; Steve \&#34;,\&#34; lastname \&#34;:\& #34;工作\&#34;}]&#34 ;; JsonArray jArray =(JsonArray)new JsonParser()。parse(json);
String sName = jArray.get(0).getAsJsonObject()。get(&#34; name&#34;)。getAsString()); String sLastName = jArray.get(0).getAsJsonObject()。get(&#34; lastname&#34;)。getAsString());
稍后见。