2014-02-28 46 views
1

我有以下的JSON響應,我想轉換爲Java POJO JSON:傑克遜反序列化不具有鍵(唯一值)

[ 
    1393591550.6117706, 
    "TYPE", 
    "TAG", 
    "Message", 
    null 
] 

(The null at the end is supposed to be there.)

我不知道怎麼樣與傑克遜(2.0)反序列化。我對Json不太熟悉,所以我不知道要搜索什麼。我研究過無鑰序列化,但有很多類似的搜索術語,我找不到我想要的。

我唯一的想法是使用JsonObject的getElements()並手動將其映射到日誌對象(這就是這個json是什麼),但我想知道是否有更好的方法來做到這一點,像@JsonElement(0)什麼的。我有我的項目設置的方式,不得不手動迭代無鑰匙條目將需要一些重大改造(或重複的代碼)。

+0

無鑰匙JSON條目你平時堅持做手工b A靜態映射在您自己的自定義解串器中參數的順序 – Durandal

回答

1

您可以編寫自定義解串器,然後將此註釋添加到您的類:

@JsonDeserialize(using = MyCustomDeserializer.class) 

在我的一個項目,我做的正是這。一個JSON合併補丁是一個數組或一個對象,所以標準的Jackson反序列化對我來說是失敗的。解串器的代碼是here

至於序列化,讓您的類實現JsonSerializable

這樣做的好處是可以{德,}序列化使用「香草」 ObjectMapper,而不必與自定義模塊等配置它

+0

感謝您的支持!我沒有意識到你可以在類中註釋一個特定的反序列化器,而不是使用代碼在objectmapper中設置它。 – Mgamerz

1

這是一個沒有自定義解串器實際上是可行的,使用這樣的事情:

@JsonFormat(shape=JsonFormat.Shape.ARRAY) 
@JsonPropertyOrder({ "value", "type", "tag", "mesage", "other" }) 
public class Data { 
    public double value; 
    public String type; 
    public String tag; 
    public String message; 
    // not sure what the null is to represent; needs to match to this property 
    public Object other; 
} 

,然後你可以看情況,像這樣:

Data data = mapper.readValue(src, Data.class);