簡體   English   中英

Java中的JSON字符串解析

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM