2

次の Item クラスがあります。

public class Item {
    public Object item;
}

GSON を使用して、このオブジェクトに JSON を挿入しています。

tmp =

{
    "_id": {
        "$oid": "5076371389d22e8906000000"
    },
    "item": {
        "values": [
            {
                "value1": [
                    4958,
                    3787,
                    344
                ],
                "value2": [
                    4,
                    13,
                    23
                ]
            }
        ], 
        "name": "item1"
    }
}

Java ビット:

Item item = new Item();
Gson g = new Gson();
it = g.fromJson(tmp.toString(), Item.class);

it.itemタイプになりますStringMaphttp://code.google.com/p/google-gson/source/browse/trunk/gson/src/main/java/com/google/gson/internal/StringMap.java?r=1131

次に、このオブジェクト内のサブオブジェクトにアクセスする必要があります。toStringこのオブジェクト内のすべてのオブジェクトを出力する、この型のオーバーライドされた関数を使用できます。しかし、どうすればそれをナビゲートできるでしょうか?PS 構造化クラスではなくオブジェクト データ型にすべてを入れる理由は、JSON 構造が毎回異なるため、実際にはクラス スキーマを持つことができないからです。助言がありますか?

4

2 に答える 2

2

代わりに、JSON を反映するオブジェクト構造を作成する必要があります (これはとにかくやろうとしていることだからです)。あなたの例では、これを使用できます:

public class MyObject {
    private Item item;
    private String _id;

    // getters, setters, etc.
}

public class Item {
    private List<Value> values;
    private String name;

    // getters, setters, etc.
}

public class Value {
    private List<Integer> values1;
    private List<Integer> values2;

    // getters, setters, etc.
}

次にMyObject.class、Gson に渡します。

MyObject myObj = g.fromJson(tmp.toString(), MyObject.class);

values次のようにリストを取得できます。

List<Integer> values1 = myObj.getItem().getValues().get(0).getValues1();
List<Integer> values2 = myObj.getItem().getValues().get(0).getValues2();

それを試して、それが機能するかどうかを確認してください。

また、ここで同様の質問に対する私の回答を確認する必要があります。具体的には、JSON オブジェクトに基づいて Gson のオブジェクト構造を作成する方法に関する最後の部分です。

于 2012-10-11T21:19:46.283 に答える