简体   繁体   English

用Jackson Java解析JSON

[英]Parsing JSON with Jackson Java

I have a problem while parsing JSON with Jackson. 用Jackson解析JSON时遇到问题。 I have a POJO object, wrapped by another. 我有一个POJO对象,由另一个包装。

Here is my 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;
    }
}

And here is the thrown exception: 这是引发的异常:

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

JSON looks in a such way: 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 totally repeat the fields of the JSON object. POJO完全重复JSON对象的字段。

I wrote my own method, which parses JSON of such a structure. 我编写了自己的方法,该方法解析这种结构的JSON。

Here is the 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;
}

The problem was that items are in the array and items is the only element. 问题在于项目位于数组中,而项目是唯一的元素。 items in its turn, is also an array, thus I used the dataArrayJSON.getJSONObject(i).getJSONObject("item") construction. 项目本身也是一个数组,因此我使用了dataArrayJSON.getJSONObject(i).getJSONObject("item")构造。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM