9

GSONの質問を含むJSONがたくさんあることは知っていますが、それらのどれも私に直接関係していません。JSONの形式が異なります。

次のようなGSONを使用して解析したいJSONデータがあります。

[
   {
    "foo":"1",
    "bar":[ { "_id":"bar1"} ],
    "too":["mall", "park"]
   }
]

そして、私はモデルクラスを持っています:

ItemArrayクラス

public class ItemArray
{
   List<Item> itemArray;

   //Get set here
}

アイテムクラス

public class Item
{
   String foo;
   List<Bar> bar;
   List<String> too;

   //Get set here
}

バークラス

public class Bar
{
   String id;

   //Get set here
}

ここに質問があります。JSONは正しい形式ですか?もしそうなら、モデルクラスは正しい形式ですか?

そうでない場合は、正しい方向に私を突き刺してください。前もって感謝します!

PS。必要に応じて、JSONデータ形式を変更できます。

4

4 に答える 4

8

あなたのjsonによると、あなたは単に持っているべきです:

public class ItemArray extends List<Item> {
}

Javaクラスを維持し、jsonを変更したい場合は、次のようにする必要があります。

{
 itemArray: [
     {
      "foo":"1",
      "bar":[ { "_id":"bar1"} ],
      "too":["mall", "park"]
     }
  ]
}

ああ、Barのidと_idとの不一致があります:

public class Bar
{
   String _id;

   //Get set here
}

アノテーションを使用して、Jsonの逆シリアル化/シリアル化中にフィールドの名前を変更することもできます。

最後になりましたが、値をより適切に入力することを検討してください。文字列でない場合は、データを文字列として表示しないでください。変換するためのJavaコードでの処理はそれほど多くありません。例えば ​​:

"foo" : 1,

fooは、文字列ではなく、intデータメンバーと見なされます。

于 2012-12-06T02:52:48.360 に答える
7

JsonArray [ {..} , {..} ](あなたのような名前なしで)応答として受け取る'itemArray'ことがありますその場合、次のコードを使用できます

Type fooType = new TypeToken<ArrayList<Item>>() {}.getType();
List<Item> array = new Gson().fromJson(response, fooType);

この公式ドキュメントの詳細を確認してください-GsonArray-例

于 2015-04-28T05:10:18.360 に答える
2

あなたがJsonArray好きなものを持っているなら、あなた[ {..} , {..} ]はGsonでこれをすることができます:

Item[] items = gson.fromJson(json, Item[].class);
于 2015-06-19T05:19:31.500 に答える
0

Jsonが有効であることを確認するには、このツールhttp://jsonlint.com/を使用します。

Class Bar(
   private String _id;
   //create getter/setters
{

public class Item
{
   String foo;
   List<Bar> bar;
   List<String> too;

   //Get set here
}
//this is also fine
public class ItemList
{
   List<Item> itemArray;

   //Get set here
}

アイテムのリストに「itemArray」という名前を付けましたが、jsonでは対応するアイテムの配列に「itemArray」という名前を付けていません。したがって、itemArrayにします。問題はjsonになく、有効です。問題は、Gsonの表現にあり、同じ名前のオブジェクト(つまり、Java POJO)の変数にjsonのGsonマップキーがあります。リストの名前がClassの場合、

List<Item> itemArray;

次に、対応するjson配列名もitemArrayである必要があります。

{
 itemArray: [
     {
      "foo":"1",
      "bar":[ { "_id":"bar1"} ],
      "too":["mall", "park"]
     }
  ]
}

したがって、jsonをそのようなオブジェクトに変換できます

 Reader reader = new InputStreamReader(IOUtils.toInputStream(json_string));
 ItemList itemList = json.toObject(reader, ItemList.class);

詳細については、ブローリファレンスをご覧ください https://stackoverflow.com/questions/13625206/how-to-parse-the-result-in-java/13625567#13625567

于 2012-12-06T04:06:34.063 に答える