我正在尝试使用Jackson将一些JSON数据转换为Java对象,这是准确的对象列表,但是我会收到此错误:

org.codehaus.jackson.map.jsonmappingexception:无法避免EntityLayer.detail的实例out start_array token

这是代码:

 ObjectMapper mapper = new ObjectMapper(); 
 List<Detail> lcd = (List<Detail>) mapper.readValue(ld, Detail.class);

ld 是JSON格式的列表,这是使我在 杰克逊教程. 。有什么 新文件(“ user.json”) 代表?我以为那是我想转换的JSON格式的字符串,这就是为什么我使用 ld.

我希望你能帮助我

有帮助吗?

解决方案

从您链接的教程中(其他集合以相同的方式工作):

因此,如果要将数据绑定到地图中,则需要使用:

Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });

如果只需要传递通用类型定义(在这种情况下通过任何非正式的内类)需要键入):重要的部分是>定义要绑定到的类型。

如果您不执行此操作(并且只需通过Map.Class),则呼叫等同于绑定到地图(即“ Untyped”地图),如上所述。

编辑:

如果您坚持被汤匙喂食:

List<Detail> lcd = mapper.readValue(ld, new TypeReference<List<Detail>>() {});

其他提示

作为另一种策略,处理数组的处理更加方便,因为您可以轻松地指定类型。因此,您也可以这样做:

Detail[] details = mapper.readValue(ld, Detail[].class);

至少在与杰克逊打交道时,阵列通常是没有用的。只要您不必修改结果太多,它们就非常方便使用,因为类型可以很好地包含,而无需使用仿制药(因此,类型安全性很强;它不仅是编译器绒毛)。

或者,自己解析JSON,并创建您想创建的任何Pojos。我这样做是为了将JSON转变为Jaxb。

请参阅“流动API示例”部分 http://wiki.fasterxml.com/jacksoninfiveminutes

它比您预期的要容易。

每当您遇到此错误时,请先检查您要转换的JSON字符串是否是适当的JSON字符串。如果您尝试创建自己的JSON字符串用于本地测试代码,则最终会遇到此错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top