2013-04-10 57 views
0

我是序列化和反序列化JSON的新手。使用org.codehaus.jackson反序列化JSON字符串

我有字符串值

String json = [{"Area":"LoremIpsum","Quantity":1500,"isSubArea":false}, 
{"Area":"LoremIpsum","Quantity":700,"isSubArea":false}]; 

,我想反序列化,我用傑克遜的ObjectMapper反序列化

ObjectMapper mapper = new ObjectMapper(); 
List<DeserializeJSON> agentsList = mapper.readValue(json,new TypeReference<List<DeserializeJSON>>() {}); 

我反序列化類

public class DeserializeJSON { 
String Area; 
Integer Quantity = 0; 
boolean isSubArea = false; 

public String getArea() { 
    return Area; 
} 
public void setArea(String Area) { 
    this.Area = Area; 
} 
public Integer getQuantity() { 
    return Quantity; 
} 
public void setQuantity(Integer Quantity) { 
    this.Quantity = Quantity; 
} 
public boolean isSubArea() { 
    return isSubArea; 
} 
public void setSubArea(boolean isSubArea) { 
    this.isSubArea = isSubArea; 
} 

}

但我得到錯誤

Unrecognized field "Area" (Class DeserializeJSON), not marked as ignorable at [Source: [email protected]; line: 1, column: 11] (through reference chain: DeserializeJSON["Area"]) 

回答

2

默認情況下,傑克遜將使用屬性訪問器在JavaBean naming conventions而非領域。爲了使您的工作例如,您可以通過添加

mapper.setVisibilityChecker(mapper.getVisibilityChecker().withFieldVisibility(Visibility.ANY)); 

看一看上VisibilityChecker其他方法來正確地定義你的JSON映射改變這一點。

+0

謝謝ryanp,我不能改變DeserializeJSON類,這樣我就不必設置visibilityChecker,其實我已經檢查了不同的組合,但沒有找到工作。 – Sushant 2013-04-10 07:58:59

+0

@Sushant - 是的,你可以,我建議你這樣做,因爲無論如何,以大寫字母開頭的字段名稱都是奇怪的。看看如何用例如自定義映射您訪問器上的'@ JsonProperty'註釋。 – ryanp 2013-04-10 08:07:33

相關問題