2016-09-20 39 views
0

我使用Jackson-jr来阅读我的JSON文件。其中之一是一个有点复杂:Jackson-jr阅读多态ArrayList

[ 
{"test-1":["a","b","c","d"]}, 
{"test-2":["b","j","d"]}, 
{"test-3":["n","e","o","p","i"]}, 
{"test-4":["s","a","v","z","b","ç","x","p"]}, 
{"test-5":["d","q","u"]}, 
{"test-6":["f","b"]} 
] 

我的代码来读取很简单:

InputStream inputStream = assetManager.open("test.json"); 
ArrayList<HashMap<String, ArrayList<String>>> arrays = JSON.std.beanFrom(ArrayList.class, inputStream); 

我的目的是让每个阵列与他们每个人的工作:

arrays.get(i); 

但是,当这条线被执行时,我有一个例外:

Caused by: java.lang.ClassCastException: com.fasterxml.jackson.jr.ob.impl.DeferredMap cannot be cast to java.util.HashMap 

Jackson-jr没有TypeFactory,TypeReference或ObjectMapper。一些链接,我发现答案杰克逊,而不是杰克逊JR:

ClassCastException when convert json to list of objects

Jackson custom deserializer for one field with polymorphic types

Tricky(?) JSON, polymorphic deserialization

有没有说,在杰克逊JR来处理呢?

+1

定义'arrays'为'名单<地图<字符串,列表 >> arrays' – sidgate

+0

您保存一天。谢谢。 – learner

回答

0

您应该编程到接口而不是实现类。由于返回的映射实现是DeferredMap而不是HashMap,因此您将获得ClassCastException。改变分配如下

List<Map<String, List<String>>> arrays = JSON.std.beanFrom(ArrayList.class, inputStream); 
+0

另外,代替'beanFrom',使用的方法可能应该是'listOfFrom',因为结果是'List',而不是Bean。如果是这样,类型将是'Map.class'。 – StaxMan

+0

根据观察结果更改源代码。 – learner