0

JSON ファイルのキー"desc""type"を 2 つの個別の配列に抽出したいと思います。ftp サイトからファイルを取得しましたが、エントリの数がわかりません。文字列配列を取得したら、「desc」値でスピナーを埋めたいと思います。どうすればそれができますか?

これは私のJSONファイルです

{
"Pagnerine":[{
        "Cialda":[{
                    "userId":1,
                    "desc":"Sottozero/Estate",
                    "type":"ct"
                    },
                    {
                    "userId":2,
                    "desc":"Piccolo/Primavera",
                    "type":"ct"
                    },
                    {
                    "userId":3,
                    "desc":"Medio",
                    "type":"ct"
                    },
                    {
                    "userId":4,
                    "desc":"Grande",
                    "type":"ct"
                    }
                ],
        "Cartone":[{
                    "userId":1,
                    "desc":"16B",
                    "type":"ct"
                    },
                    {
                    "userId":2,
                    "desc":"17",
                    "type":"ct"
                    },
                    {
                    "userId":3,
                    "desc":"34",
                    "type":"ct"
                    },
                    {
                    "userId":4,
                    "desc":"20",
                    "type":"ct"
                    }
                ]
            }
        ],
"Cucchiaini":[],
"Vaschette":[],
"Zuccheri":[],
"versione":"100"
}

エントリー (desc または type) の数を取得するためにこのコードを実装しようとしましたが、最初の部分「Cialda」「Cartone」のみをカウントするため失敗しました

Iterator<String> iter = jObj.keys();            
                    while (iter.hasNext()) {
                        String key = iter.next();
                        try {
                            JSONArray jArray = jObj.getJSONArray(key);
                            // looping through
                            entry += jArray.length();

                        } catch (JSONException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
4

2 に答える 2

1

投稿したコードは、質問の目的と一致しません。しかしentry、最初の 2 つの要素のみをカウントする理由 (および jObj がその要素JSONObjectを含む有効な要素であると仮定する) の問題に答えるには、次のようにします。Pagnerine

for(int i = 0; i < jObj.length(); i++) {
    JSONObject childObject = new JSONObject(jObj.get(i).toString());
    entry += childObject.length();
}

entryJSONファイルにある要素の総数が含まれているはずです。変更は、各親要素 (この場合はCialdaCartone) を反復処理し、これらの要素ごとに子要素の数をカウントすることです。

編集 コメントによると、これは簡単に修正して、親と子の数を取得できます。

for(int i = 0; i < jObj.length(); i++) {
    parentCount += jObj.length();
    JSONObject childObject = new JSONObject(jObj.get(i).toString());
    childCount += childObject.length();
}
于 2013-10-16T18:20:15.683 に答える
1

POJO を使いやすくし、後で潜在的な変更に適応できるように、このための管理しやすいソリューションを実装することをお勧めします。私の好みのアプローチは [GSON}( https://code.google.com/p/google-gson/ ) を使用することですが、Jacksonもあります。

詳細についてはGSON ユーザー ガイドを参照してください。ただし、基本的な概念は次のとおりです。

私のJSONが次のようになっているとしましょう:

JSON

{ "items" : 
  [
    {
      "type" : "food",
      "name" : "Tacos"
    },
    {
      "type" : "food",
      "name" : "Bacon"
    },
    {
      "type" : "food",
      "name" : "Beer"
    },
  ]
}

次のオブジェクトを作成します。

Items.java

public class Items {
  List<Item> items;
}

アイテム.java

public class Item {
  String type;
  String name;
}

次に、JSON を取得したら、次のようにして Items オブジェクトを作成します。

Items deliciousFoodStuffs = gson.fromJson(json, Items.class);   

これにより、JSON を POJO に逆シリアル化し、心ゆくまで使用できるようになります。

フィールド名を介してマップするのではなく、別の名前の Java フィールドにマップするとします。代わりに次のようにします。

アイテム.java

public class Item {
  @SerializedName("type")
  String typeValue;
  @SerializedName("name")
  String nameValue;
}

以前と同じ呼び出しを使用する

Items deliciousFoodStuffs = gson.fromJson(json, Items.class);   

これで同じ結果が得られますが、変数の名前が異なることを期待してください。

※ビール、ベーコン、タコスはどれも美味しいので美味しい順に並べるとは限りません。

于 2013-10-16T18:24:22.970 に答える