2012-07-05 114 views
1

解析JSON与杰克逊时出现问题。我有一个POJO对象,由另一个包裹。与杰克逊Java解析JSON

这里是我的代码:

in main: 
ObjectMapper mapper = new ObjectMapper(); 

List<ItemBean> mpl2 = mapper.readValue(col.toString(),new TypeReference<List<ItemBean>>() {}); 
my POJO class: 

public class ItemBean implements Serializable { 
    private List<Item> items; 
    @JsonProperty("Item") 
    public List<Item> getItems() { 
     return items; 
    } 
    public void setItems(List<Item> items) { 
     this.items = items; 
    } 
} 

public class Item implements Serializable{ 
    public String field1; 
    public Integer field2; 

    public static final class Field3 extends GenericJson { 
     private String subfield1; 
     private String subfield2; 
    } 
} 

这里是抛出的异常:

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "item" (Class bean.item), not marked as ignorable 
at [Source: [email protected]; line: 4, column: 16] (through reference chain: bean.ItemBean["items"]->bean.Item["item"]) 

JSON看起来在这样的方式:

["{\n 
      \"items\": 
     [ 
     \n { 
     \n \"item\": { 
     \n \"field1\": \"val1\", 
     \n \"field2\": \"val2\", 
     \n \"field3\": [ 
         \n  { 
         \n  \"subfield1\": subval 
         \n  \"subfield2\": subval 
         \n  } 
         \n ] 
         \n } 
         \n }, 
     \n \"item\": { 
     \n \"field1\": \"val1\", 
     \n \"field2\": \"val2\", 
     \n \"field3\": [ 
         \n  { 
         \n  \"subfield1\": subval 
         \n  \"subfield2\": subval 
         \n  } 
         \n ] 
         \n } 
         \n }, 
     \n \"item\": { 
     \n \"field1\": \"val1\", 
     \n \"field2\": \"val2\", 
     \n \"field3\": [ 
         \n  { 
         \n  \"subfield1\": subval 
         \n  \"subfield2\": subval 
         \n  } 
         \n ] 
         \n } 
         \n }, 


etc...... may I haven't closed brackets correctly, but they are correct :) 
      } 
     ] 
    "] 

POJO完全重复的领域JSON对象。

+0

JSON的外观如何? – Thomas 2012-07-05 14:42:32

+0

@Thomas补充了json – 2012-07-05 14:55:11

回答

1

我写了我自己的方法,它解析了这种结构的JSON。

下面是代码:

public static List parseList(String jsonInput, Class clazz) { 
    List result = new LinkedList(); 
    JSONArray json = (JSONArray) JSONSerializer.toJSON(jsonInput); 
    JSONObject items = (JSONObject)json.getJSONObject(0); 
    JSONArray dataArrayJSON = (JSONArray)items.getJSONArray("items"); 

    for (int i = 0; i < dataArrayJSON.size(); i++) { 
     result.add(JSONObject.toBean(dataArrayJSON.getJSONObject(i).getJSONObject("item"), clazz)); 
    } 
    return result; 
} 

的问题是,项目阵列中的和物品是唯一的元件。项目也是一个数组,因此我使用了dataArrayJSON.getJSONObject(i).getJSONObject("item")构造。