尝试在java中使用Jackson时出现问题
我正在尝试使用Jackson将一些JSON数据转换为Java对象,这是一个精确的对象列表,但是我收到了这个错误:
org.codehaus.jackson.map.JsonMappingException:无法从START_ARRAY标记反序列化entitylayer.Detail的实例
这是代码:
ObjectMapper mapper = new ObjectMapper(); List lcd = (List) mapper.readValue(ld, Detail.class);
ld是Json格式的列表,这是让我在jackson教程中融入的部分。 新文件(“user.json”)代表什么? 我假设那是我想要转换的json格式的字符串,这就是我使用ld的原因。
我希望你能帮助我
从您链接的教程(其他集合以相同的方式工作):
因此,如果要将数据绑定到Map,则需要使用:
Map
result = mapper.readValue(src, new TypeReference 其中TypeReference只需要传递generics类型定义(在这种情况下通过任何内部类):重要的部分是>,它定义了要绑定的类型。
如果你不这样做(并且只是传递Map.class),则调用等同于绑定到Map(即“无类型”Map),如上所述。
编辑:
如果你坚持用勺子喂食:
List lcd = mapper.readValue(ld, new TypeReference>() {});
作为替代策略,处理数组会更方便,因为您可以轻松指定类型。 所以,你也可以这样做:
Detail[] details = mapper.readValue(ld, Detail[].class);
arrays经常未被充分利用,至少在与jackson打交道时。 只要您不必过多地修改结果,它们就非常方便使用,因为类型很好地包含而不需要使用generics(因此,类型安全性很强;它不仅仅是编译器的漏洞)。
或者自己解析JSON并创建您想要创建的任何POJO。 我这样做是为了将JSON转换为JAXB。
请参阅http://wiki.fasterxml.com/JacksonInFiveMinutes上的“Streaming API示例”部分
它比你想象的要容易。
每当出现此错误时,首先检查您尝试转换为的JSON字符串是否是正确的JSON字符串。 如果您尝试创建自己的JSON字符串以便对本地代码进行测试,那么您最终会收到此错误。