我将一个字符串传递给一个方法,我需要将其反序列化为一个对象,但我不断遇到 JSON 映射异常。
private static final ObjectMapper mapper = new ObjectMapper();
public ArrayList<Double> parseVector(String json){
Vector vector = new Vector();
try {
vector = mapper.readValue(json, TypeFactory.collectionType(ArrayList.class, Vector.class));
} catch ETC ........
还应该注意的是,Vector 是一个内部类,设置如下:
static class Vector{
@JsonProperty("P")
public Double performance;
@JsonProperty("M")
public Double margin;
@JsonProperty("I")
public Double pace;
}
对于此示例,json 的值为:
{'P':8,'M':2,'I':0}
我收到此异常:
JSONDeserializer : getVectorMap() JsonMappingException :
org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
at [Source: java.io.StringReader@77d65595; line: 1, column: 1]
谁能给我一些关于这个的见解?
最佳答案
您的新错误来自以下事实:
vector = mapper.readValue(json, TypeFactory.collectionType(ArrayList.class, Vector.class));
告诉 Jackson 反序列化 ArrayList<Vector>
来自json
。您的json
值包含一个 JSON 对象。一个List
类型只能从 JSON 数组反序列化。
直接使用
vector = mapper.readValue(json, Vector.class);
关于java - java中的JSON字符串解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28772362/