[英]JSON String parsing in java
我將字符串傳遞給方法,我需要將其反序列化為對象,但我一直遇到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]
誰能給我一些見識?
傑克遜無法反序列化非靜態內部類。 之所以存在該約束,是因為沒有內部類的默認構造函數,因此沒有通用的方法來實例化此類。 但是,序列化工作正常。
這篇文章提供了更詳細的推理:
請注意,內部類可以訪問外部類的所有成員變量。 當我們編寫以下代碼時
public class Outer {
// non-static
class Inner {
}
}
編譯器生成類似於
public class Outer { ... }
class Outer$Inner {
private final Outer parent;
Outer$Inner(Outer p) {
parent = p;
}
}
您的新錯誤來自以下事實:
vector = mapper.readValue(json, TypeFactory.collectionType(ArrayList.class, Vector.class));
告訴Jackson從json
反序列化ArrayList<Vector>
。 您的json
值包含一個JSON對象。 只能從JSON數組反序列化List
類型。
只需使用
vector = mapper.readValue(json, Vector.class);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.