2012-07-05 5 views
1

J'ai un problème lors de l'analyse de JSON avec Jackson. J'ai un objet POJO, enveloppé par un autre.Analyse JSON avec Jackson Java

Voici mon code:

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; 
    } 
} 

Et voici l'exception levée:

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 regarde de telle manière:

["{\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 répéter totalement les champs de l'objet JSON.

+0

À quoi ressemble le JSON? – Thomas

+0

@Thomas a ajouté json –

Répondre

1

J'ai écrit ma propre méthode, qui analyse JSON d'une telle structure.

Voici le code:

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; 
} 

Le problème était que les articles sont dans le tableau et les éléments est le seul élément. articles à son tour, est également un tableau, j'ai donc utilisé la construction dataArrayJSON.getJSONObject(i).getJSONObject("item").