0

この JSON ファイルを解析するために GSON を使用しています。

{
    "database" : {
        "source" : "google",
        "items" : [
            {"title" : "hello world",
            "id" : "id_hello_world"},

            {"title" : "goodbye world",
            "id" : "id_goodbye_world"}
        ]
    }
}

どちらを読み込んだかString jsonLine

それを解析してすべての値を出力しようとしていますがClassCastException

JsonObject source = database.getAsJsonObject("source")ライン。

データの検索が間違っていると思います。これを使用して検索して出力します:

        JsonElement jelement = new JsonParser().parse(jsonLine);

        JsonObject jobject = (JsonObject) jelement;

        JsonObject database = jobject.getAsJsonObject("database"); //Get Database
        JsonObject source = database.getAsJsonObject("source"); //Get Source
        System.out.println("Source: " + source.toString()); //Print source

        JsonArray items = database.getAsJsonArray("items"); //Get items array

        for(int i=0; i< items.size(); i++){ //for every item
            JsonObject item = (JsonObject) items.get(i); //Select item i
            JsonObject title = (JsonObject) item.getAsJsonObject("title");
            JsonObject id = (JsonObject) item.getAsJsonObject("id");
            System.out.println("Item " + i + " title : " + title.toString() + ", id : " + id.toString());
        }

誰かが私のコードを修正できれば完璧です。これを使用してこれを行う他の簡単な方法があることは知っていますがGSON.fromJSON(jsonLine, Wrapper.class)、この方法でも行うことを学ぼうとしています。助けてくれてありがとう!

4

2 に答える 2

1

メソッドを使用する前にGson、テンプレート構造を作成します。

class Item{
  private String item = "";
  private String id = ""; // for sure you can use 'int'
}

public class DataBase{
  private  List<Item> items = null;
  private String source = "";
}

今あなたのメインクラス:

public class YourClass{
 private DataBase database = "";

 ....

 database  = gson.fromJson(yourString, YourClass.class);

...
}

try/catchラッパーを忘れないでください

楽しみ

于 2013-08-24T14:49:30.853 に答える
1

JsonPrimitiveの代わりに使用しJsonObjectます。JsonPrimitive(GSON 2.2.3 のバージョンに関しては、GSONへの変換は不可能だったため、GSON の内部バグに違いありませんJsonObject) したがって、コードは次のようになります。

JsonElement jelement = new JsonParser().parse(jsonLine);

JsonObject jobject = (JsonObject) jelement;

JsonObject database = jobject.getAsJsonObject("database"); // Get
                                                            // Database
JsonPrimitive source = database.getAsJsonPrimitive("source"); // Get
                                                                // Source
System.out.println("Source: " + source.toString()); // Print source

JsonArray items = database.getAsJsonArray("items"); // Get items array

for (int i = 0; i < items.size(); i++) { // for every item
    JsonObject item = (JsonObject) items.get(i); // Select item i
    JsonPrimitive title = item.getAsJsonPrimitive("title");
    JsonPrimitive id = item.getAsJsonPrimitive("id");
    System.out.println("Item " + i + " title : " + title.toString()
            + ", id : " + id.toString());
}

Maxim Shoustin が示したように、テンプレートを作成することは良い解決策になります。

于 2013-08-25T06:51:55.430 に答える