10

JSON オブジェクトからキーを抽出しようとしています。この場合の JSON オブジェクトは、SkyRockというソーシャル ネットワーキング サイトへの API 呼び出しを行うことによって取得され、次のようになります。

{
  "max_page": 2,
  "posts":  {
    "3111623007":  {
      "id_post": 3111623007,
      "media_align": "float_left",
      "tags":  [],
      "nb_comments": 24
    },
    "3114564209":  {
      "id_post": 3114564209,
      "media_align": "float_left",
      "tags":  [],
      "nb_comments": 33
    },
    "3116902311":  {
      "id_post": 3116902311,
      "media_align": "float_left",
      "tags":  [],
      "nb_comments": 29
    }
  }
}

基本的に、すべてのpost_id値を ArrayListに格納したいと考えています。これを行うために、JSON オブジェクトからキーを抽出しようとしており、次のように実行しています。

JSONObject posts = (JSONObject) jo.get("posts");
ArrayList<String> keys = (ArrayString<String>) posts.keyset();

問題は、 keyset()メソッドから取得した結果を格納できる適切な変数の型を見つけることができないことです。

私は答えを探してみましたが、ほとんどの場合、キーを抽出するためにkeys()が使用されています(何らかの理由で使用できず、おそらくorg.json.simpleを使用しているためだと思いますが、わからない)。

問題の解決策またはキー値を取得するための代替方法を見つけるために、誰か助けてもらえますか?

ありがとう。

4

6 に答える 6

19

javadocは次のように述べています。

public interface JsonObject
extends JsonStructure, Map<String,JsonValue>

したがって、JSONObject はキーが typeStringで値がtype の Map ですJSONValue

そしてのjavadocはMap<K, V>.keySet()言う:

Set<K> keySet()

Returns a Set view of the keys contained in this map

したがって、JSONObject.keySet()返されるのは a ですSet<String>(JSON オブジェクトのキーは文字列であるため、これは非常に論理的です)。

したがって、必要なのは次のとおりです。

Set<String> keys = posts.keySet();
于 2013-10-05T08:18:17.420 に答える
7

がどこにあるかをposts表すMapJSONObjectkeyString

JSONObject mainObject = new JSONObject(jsonString);

JSONObject posts = mainObject.getJSONObject("posts");

Map<String, JSONObject> map = (Map<String,JSONObject>)posts.getMap();

ArrayList<String> list = new ArrayList<String>(map.keySet());

System.out.println(list);

出力:

[3116902311, 3114564209, 3111623007]
于 2013-10-05T08:17:18.283 に答える
7

これは私のために働く

o は JSONObject です -> import org.json.simple.JSONObject;

Set<?> s =  o.keySet();

    Iterator<?> i = s.iterator();
    do{
        String k = i.next().toString();
        System.out.println(k);

    }while(i.hasNext());
于 2016-12-14T14:45:06.560 に答える
-2

私のJSONOjectはjsonOjectです。

  Iterator <String> listKEY = jsonOject.keys();
                do {
              String newKEY = listKEY.next().toString();
                   
                }while (listKEY.hasNext());
于 2020-02-07T14:13:45.280 に答える