簡體   English   中英

如何使用GSON從同一個JSON文件中獲取多個Java對象?

[英]How to get multiple Java objects from the same JSON file with 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文件有問題?

您應該直接解析到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);

這樣的事情可以做的工作

JsonObject jsonObject = gson.fromJson(reader, JsonObject.class);
gson.fromJson(jsonObject.get("card"), new TypeToken<List<Card>>(){}.getType());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM