如何使用GSON从同一个JSON文件中获取多个Java对象?

时间:2018-06-09 11:59:46

标签: java json gson

我的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文件有问题吗?

2 个答案:

答案 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());