2013-01-24 112 views
3

我使用Jackson反序列化以下JSON成POJO:無法反序列化JSON成一個POJO(使用傑克遜)

{ 
    "etag": "\"SomeETag\"", 
    "jobComplete": true, 
    "jobReference": { 
     "jobId": "someJobId", 
     "projectId": "someProjectId" 
    }, 
    "rows": [ 
     { 
      "f": [ 
       { 
        "v": "101" 
       }, 
       { 
        "v": "FirstService" 
       }, 
       { 
        "v": "firstAPI" 
       } 
      ] 
     }, 
     { 
      "f": [ 
       { 
        "v": "102" 
       }, 
       { 
        "v": "SecondService" 
       }, 
       { 
        "v": "SecondAPI" 
       } 
      ] 
     } 
    ], 
    "totalRows": "2" 
} 

下面是我使用的POJO:

@JsonAutoDetect 
    @JsonIgnoreProperties(ignoreUnknown = true) 
    public class Response { 

     public String etag; 
     public boolean jobComplete; 
     public List<FWrapper> rows = new ArrayList<FWrapper>(); 
    } 

    class FWrapper { 
     public F f; 
    } 

    class F { 
     public List<VWrapper> vWrappers = new ArrayList<VWrapper>();  
    } 

    class VWrapper { 
     public String v; 
    } 

我使用這段代碼做映射:

ObjectMapper mapper = new ObjectMapper(); 
    Response response = mapper.readValue(response, Response.class); 

而這裏是我得到的錯誤:

org.codehaus.jackson.map.JsonMappingException:在[來源無法反序列化mypackage.F的情況下進行START_ARRAY令牌 的:[email protected]; ] 227行:1,列(通過參考鏈:mypackage.Response [ 「行」] - > mypackage.FWrapper [ 「F」])

我檢查用類似的錯誤幾個老問題,但couldn」還沒有解決我的問題。 This 看起來和我的非常相似,正確的回答是Your data is problematic in that you have inner wrapper objects in your array,我認爲我的數據也是如此。但是我仍然無法做正確的POJO映射。任何指針將不勝感激。

編輯:更正一個錯字(Json我使用是有效的)

+0

一個建議:儘量填充一個'Response'實例,讓傑克遜序列化。看看這與你得到的JSON輸入在結構上有什麼不同。這應該解釋具體問題。 – StaxMan

回答

0

你的「行」陣列不具有右方括號]

它使JSON無效。

仔細閱讀錯誤消息:

org.codehaus.jackson.map.JsonMappingException:在[來源無法反序列化mypackage.F 的情況下進行START_ARRAY令牌的:[email protected];行:1,柱:227](通過參考鏈:mypackage.Response [「行」] - > mypackage.FWrapper [ 「F」])


現在我看到修改過的JSON - 添加它。

你還有同樣的問題嗎?

+0

感謝您注意,但這只是我發佈的問題中的一個錯字。我使用的原始'Json'是有效的,所以這不是問題。 – Swapnil

+0

@Swapnil你嘗試重新運行它嗎?同樣的問題? –

+0

正如我所說,錯字只是在我在這裏發佈的問題。原始的Json已經有了這個方括號。所以是的,問題仍然存在。 – Swapnil

5

您的類模型與您的JSON不匹配。

在你的JSON中,f是一個數組而不是對象。在你的課堂上,F是一個包含東西列表的對象。

像這樣的映射應該工作(未經測試)

public class Response { 

    public String etag; 
    public boolean jobComplete; 
    public List<F> rows; 
} 


public class F { 
    public List<V> f; 
} 

public Class V { 
    public String v; 
} 
+0

我認爲你是對的。包裝很奇怪 - 它們不匹配JSON對象結構。 +1。 –

+0

你說'f'不是'JSON'中的對象是對的!我刪除了F,保留了原來的FWrapper和VWrapper。 'class FWrapper {public List f; ''工作。 – Swapnil