[英]Read Object Array From JSON Array in a JSON file (using Jackson)
我正在尝试从json文件中的JSON数组读取对象数组。 读取对象内部的数组(让我们将其称为根对象)并不确定该怎么做已经有一段时间了。 底部的问题。
拳类:(包含主要方法)
package Shopping;
import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.map.ObjectMapper;
import org.json.simple.parser.ParseException;
public class Game {
public static void main(String[] args) throws IOException,
ParseException{
File file = new File("shopping.json");
ObjectMapper mapper = new ObjectMapper();
Main m = mapper.readValue(file, Main.class);
System.out.println(m.getDate());
ShoppingList[] list = mapper.readValue(file,
ShoppingList[].class);
System.out.println(list.toString());
}
}
二等舱:
package Shopping;
import org.codehaus.jackson.annotate.JsonProperty;
public class Main {
private String date;
private String name;
private String Store;
private ShoppingList List;
// BELOW THE FIELDS ARE THE GETTERS AND SETTERS FOR THESE FIELDS
}
第三类:
package Shopping;
import java.io.IOException;
import java.math.BigInteger;
import java.util.*;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.annotate.JsonPropertyOrder;
import org.json.simple.parser.ParseException;
public class ShoppingList {
private String name;
private int amount;
// AGAIN BELOW THESE FIELDS ARE THE GETTERS AND SETTERS FOR THESE FIELDS
}
这是保存JSON数据的JSON文件:(Shopping.json)
{
"date": "2016-07-14",
"name": "Candice",
"Store": "aStore",
"Food": [
{
"amount": 6,
"name": "eggs"
},
{
"amount": 1,
"name": "Chicken"
},
{
"amount": 5,
"name": "Bananas"
},
{
"amount": 1,
"name": "Pasta"
}
]
}
当我尝试运行main方法时,出现以下错误消息:
run:
Exception in thread "main"
org.codehaus.jackson.map.JsonMappingException: Can not deserialize
instance of Shopping.ShoppingList out of START_ARRAY token
at [Source: Shopping.json; line: 6, column: 26] (through reference chain:
Shopping.Main["Food"])
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:198)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeUsingCreator(BeanDeserializer.java:560)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:366)
at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:230)
at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:334)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:495)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:351)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2131)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1349)
at shopping.Shopping.main(Shopping.java:31)
/Users/Me/Library/Caches/NetBeans/8.2/executor-snippets/run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)
谁能解释我为什么会为我得到这个错误,还有谁能解决这个问题,以便我可以读取数组以返回其中的项目。 任何帮助将不胜感激。 非常感谢。
Pojo课堂上的问题。 试试这个:
转换器:
String json= "{\n" +
" \"date\": \"2016-07-14\",\n" +
" \"name\": \"Candice\",\n" +
" \"Store\": \"aStore\",\n" +
" \"Food\": [\n" +
" {\n" +
" \"amount\": 6,\n" +
" \"name\": \"eggs\"\n" +
" },\n" +
" {\n" +
" \"amount\": 1,\n" +
" \"name\": \"Chicken\"\n" +
" },\n" +
" {\n" +
" \"amount\": 5,\n" +
" \"name\": \"Bananas\"\n" +
" },\n" +
" {\n" +
" \"amount\": 1,\n" +
" \"name\": \"Pasta\"\n" +
" }\n" +
" ]\n" +
"}";
Main main = new ObjectMapper().readValue(json,Main.class);
主类:
package Shopping;
import org.codehaus.jackson.annotate.JsonProperty;
public class Main {
private String date;
private String name;
@JsonProperty("Store")
private String store;
@JsonProperty("Food")
private List<ShoppingList> Food;
// BELOW THE FIELDS ARE THE GETTERS AND SETTERS FOR THESE FIELDS
}
购物清单:
public class ShoppingList implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private int amount;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.