[英]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.