jackson反序列化json到java-objects [英] jackson deserialization json to java-objects
问题描述
这是我的Java代码,用于反序列化,
我试图将json字符串转换为java对象。在这样做时,我使用了以下代码:
Here is my Java code which is used for the de-serialization, i am trying to convert json string into java object. In doing so i have used the following code:
package ex1jackson;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class Ex1jackson {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
try {
String userDataJSON = "[{\"id\":\"value11\",\"name\": \"value12\",\"qty\":\"value13\"},"
+ "{\"id\": \"value21\",\"name\":\"value22\",\"qty\": \"value23\"}]";
product userFromJSON = mapper.readValue(userDataJSON, product.class);
System.out.println(userFromJSON);
} catch (JsonGenerationException e) {
System.out.println(e);
} catch (JsonMappingException e) {
System.out.println(e);
} catch (IOException e) {
System.out.println(e);
}
}
}
和我的product.java类
and my product.java class
package ex1jackson;
public class product
{
private String id;
private String name;
private String qty;
@Override
public String toString() {
return "Product [id=" + id+ ", name= " + name+",qty="+qty+"]";
}
}
我收到以下错误。
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
Unrecognized field "id" (class ex1jackson.product), not marked as ignorable (0 known properties: ]) at
[Source: java.io.StringReader@16f76a8; line: 1, column: 8] (through reference chain: ex1jackson.product["id"])
BUILD SUCCESSFUL (total time: 0 seconds)
帮我解决这个问题,
推荐答案
看起来你好像是尝试从JSON中读取实际描述数组的对象。 Java对象使用大括号 {}
映射到JSON对象,但是您的JSON实际上以方括号 []
开头指定数组。
It looks like you are trying to read an object from JSON that actually describes an array. Java objects are mapped to JSON objects with curly braces {}
but your JSON actually starts with square brackets []
designating an array.
实际拥有的是 List< product>
描述泛型类型,因为Java的类型擦除,您必须使用 TypeReference
。您的反序列化可以是: myProduct = objectMapper.readValue(productJson,new TypeReference< List< product>>(){});
What you actually have is a List<product>
To describe generic types, due to Java's type erasure, you must use a TypeReference
. Your deserialization could read: myProduct = objectMapper.readValue(productJson, new TypeReference<List<product>>() {});
其他一些注释:你的课程应该始终是CamelCased。你的main方法可以只是 public static void main(String [] args)抛出异常
这可以节省你所有无用的 catch
块。
A couple of other notes: your classes should always be CamelCased. Your main method can just be public static void main(String[] args) throws Exception
which saves you all the useless catch
blocks.
这篇关于jackson反序列化json到java-objects的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!