2016-07-25 4 views
0

このようなものです。 http://jsonlint.com/は有効であると言います。この例では、{}内のJsonが簡略化されています。Gsonを使用してJavaでネストされたJSON配列を非直列化する

[[0,{"ok":true},[]],[1,{"ok":false},[]]] 

またはインデントを持つ:

[ 
    [0, { 
      "ok": true 
     }, 
     [] 
    ], 
    [1, { 
      "ok": false 
     }, 
     [] 
    ] 
] 

これは、オブジェクトJSONClassためのクラスです。

このJSON文字列は配列の配列で、後者にはIDと実際のJSONデータと空の配列が含まれています。どのように私はそれをdeserializeすることができますか?

これは機能しません。私はサブクラスでクラスを作ろうとしましたがうまくいきませんでした。

JSONClass[] t = g.fromJson(json, JSONClass[].class); 
+1

これらのオブジェクトのJSONリストは '[{" ok ":true}、{" ok ":false}]'ではないでしょうか? – khelwood

+0

khelwood、それははるかに簡単だろうが、最初に、私はそれらのIDが必要、次に、私は入力フォーマットを変更することができません – Esixt

+1

ここに偽の空の構造がたくさんあります。表現しようとしているドメインクラスを取得できない場合は、JSONを直接解析し、独自のドメインクラスを作成することをおすすめします。 – azurefrog

答えて

0

ここでは配列の配列があります。 GsonはJSONオブジェクト自体をあなたが望むクラスに変換することができますが、それぞれ別々にgson.fromJson()を呼び出さなければなりません。あなたのJSONを含む

与えられた文字列のJSONは、このようなものは動作するはずです:

Gson gson = new Gson(); 
JsonParser jsonParser = new JsonParser(); 
JsonArray jsonArray = jsonParser.parse(json).getAsJsonArray(); 

for (JsonElement e: jsonArray) { 
    JSONClass o = gson.fromJson(e.getAsJsonArray().get(1), JSONClass.class); 
} 

基本的に、JsonParserは、JSONの配列やオブジェクトのためのGson基本クラスであるJsonElement、にあなたのテキストを変換します。私たちはテキストを解析したJsonArrayの要素を繰り返し処理することができます。これはフォーマット[id、object]の別の配列です。各要素に対して、オブジェクト部分を取り出し、それをPOJOに逆シリアル化します。

+0

ありがとうございます。 – Esixt

関連する問題