我的json文件如下所示:
{
"card":[
{
"id": 1,
"CardType":"xxx",
"CardDescription":"xxx",
},
{
"id": 2,
"CardType":"yyy",
"CardDescription":"yyy",
}
]
}
对于每个“卡片”,我想生成一个Java对象。所以我用Java创建了一个“Card”类:
public class Card {
private int id;
private String cardType;
private String cardDesc;
//getters and setters
}
这是我的第一个问题:如何告诉我的程序“cardType”对应于JSON文件中的“CardType”?
到目前为止生成对象的代码是这样的: (selectedFile是JSON文件,用户可以使用FileChooser选择它)
try{
Gson gson = new GsonBuilder().create();
BufferedReader reader = new BufferedReader(new FileReader(selectedFile));
JsonStreamParser p = new JsonStreamParser(reader);
while(p.hasNext()){
JsonElement e = p.next();
if(e.isJsonObject()){
Card card = gson.fromJson(e, Card.class);
System.out.println(card.getCardDesc());
}
}
//System.out.println();
}
catch(Exception f){
f.printStackTrace();
}
然而,这不起作用。错误讯息:
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException:意外的值 第10行第5行路径$
我的代码错了吗?或者我的JSON文件有问题吗?
答案 0 :(得分:2)
您应该直接解析到Card
类,而不是阅读解析器。
创建一个包装器:
public class CardArray {
List<Card> card;
}
然后告诉您要将cardType
映射到CardType
路径:
public class Card {
private int id;
@SerializedName("CardType")
private String cardType;
@SerializedName("CardDescription")
private String cardDesc;
//getters and setters
}
然后阅读您的数据:
CardArray cardArray = gson.fromJson(reader, CardArray.class);
答案 1 :(得分:0)
这样的事情可以完成工作
JsonObject jsonObject = gson.fromJson(reader, JsonObject.class);
gson.fromJson(jsonObject.get("card"), new TypeToken<List<Card>>(){}.getType());