0

以下のjsonレスポンスから値を取得したい。最初のキーから値を取得できますが、別のキー オブジェクトからは取得できません。すべての URL の値を取得したいのですが、どの URL も動的でキーではありません。以下はjson応答です:

body、title、created_date の値を取得できます

{
"17": {
    "27": {
        "url": "some text here 1"
    },
    "28": {
        "url": "some text here 12"
    },
    "29": {
        "url": "some text here 123"
    },
    "title": "some text goes here",
    "body": "Some text goes here",
    "created_date": "1395386881"
 }
}

私がしようとしているコードは以下の通りです:

try {
        json = new JSONTokener(jsonNewsResponse).nextValue();
        if (json instanceof JSONObject) {
            JSONObject jsonObject = (JSONObject) json;
            Iterator<?> keys = jsonObject.keys();
            while (keys.hasNext()) {
                nid = String.valueOf(keys.next());
                JSONObject jsonObj = jsonObject.getJSONObject(nid);
                attributeValue = jsonObj.getString(attributeName);
                    List<String> listitems = new ArrayList<String>();
                    Iterator<?> key = jsonObj.keys();
                    while (key.hasNext()) {

                        String fid = String.valueOf(key.next());
                        System.out.println("FID"+fid);
                        System.out.println("FID"+fid);
                        System.out.println("FID"+fid);
                        System.out.println("FID"+fid);
                        JSONObject jObject = jsonObj.getJSONObject(fid);
                        listitems.add(jObject.getString("url"));
                    }
                    attachments = listitems.toArray(new String[0]);
            }
        }
4

3 に答える 3

2

これを試して..

    JSONObject Jobj;
    try {
        Jobj = new JSONTokener(jsonNewsResponse).nextValue();
        if (Jobj instanceof JSONObject) {
            JSONObject jsonObject = (JSONObject) Jobj;
            Iterator<?> keys = jsonObject.keys();
            while (keys.hasNext()) {
                String nid = String.valueOf(keys.next());
                JSONObject jsonObj = jsonObject.getJSONObject(nid);
                    Iterator<?> key = jsonObj.keys();
                    while (key.hasNext()) {
                        String fid = String.valueOf(key.next());
                        Log.v("fid--",""+fid);

                        if( jsonObj.get(fid) instanceof JSONObject){
                            JSONObject jObject = jsonObj.getJSONObject(fid);
                            String url = jObject.getString("url");
                                    Log.v("url--",""+url);
                        }else{
                                String fidfadd = jsonObj.getString(fid);
                                Log.v("fidfadd--",""+fidfadd);
                            }
                     }
            }
        }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
于 2014-03-26T08:45:24.977 に答える
1

Gson ライブラリを使用します。

YourObjectsClass yourObject = new Gson().fromJson(json, YourObjectsClass.class)

よく調べてみると、json が Java の非常に優れたオブジェクト モデルにマップできるかどうかはわかりません。「タイトル」などの実際の文字列名を持つフィールドと同じ層にキー「27」を持つフィールドがありますが、値として異なるタイプのオブジェクトがあります (文字列を持つものもあれば、1 つのフィールドを含む複雑なオブジェクトを持つものもあります)。 「url」という名前で)。ただし、Java フィールド名は数字で始めることはできないため、通常の Java クラスを作成することはできず、<Object>その値としてのみ受け入れるマップでない限り、それからマップを作成することもできません。これは理想的ではありません。

したがって、Json を修正してから、それを表すモデル クラスを作成することをお勧めします。

于 2014-03-26T07:45:59.373 に答える