0

Android アプリケーションで FQL を使用して Facebook API から取得した結果 (JSON) を解析しようとしています。

この部分を除くすべての結果セットを解析できました。

[10151392619250579,10151392618640579,10151392618590579,10151392618785579,10151392618835579,10151392618885579,10151392619010579,10151392619155579]

私が作っているFQLクエリは次のとおりです。

SELECT app_data FROM stream WHERE filter_key in (SELECT filter_key FROM stream_filter WHERE uid = me() AND type = 'newsfeed') AND is_hidden = 0 LIMIT 200

次のような結果が返されます。

{
    "app_data": {
        "attachment_data": "[]",
        "images": "[10151392619250579,10151392618640579,10151392618590579,10151392618785579,10151392618835579,10151392618885579,10151392619010579,10151392619155579]",
        "photo_ids": [
          "10151392619250579",
          "10151392618640579",
          "10151392618590579",
          "10151392618785579",
          "10151392618835579",
          "10151392618885579",
          "10151392619010579",
          "10151392619155579"
        ]
    }
}

そして、これは私がデータを取得するために使用したコードです:

// GET THE APP DATA
if (JOFeeds.has("app_data"))    {
    String strAppData = JOFeeds.getString("app_data");

    if (strAppData.equals("[]"))    {
        // DO NOTHING
    } else {

        JSONObject JOAppData = new JSONObject(strAppData);

        if (JOAppData.has("photo_ids")) {
            String strPhotoIDS = JOAppData.getString("photo_ids");

            JSONArray JAPhotoIDS = new JSONArray(strPhotoIDS);
            Log.e("JAPhotoIDS", JAPhotoIDS.toString());

            for (int j = 0; j < JAPhotoIDS.length(); j++) {
                JSONObject JOPhotoIDS = JAPhotoIDS.getJSONObject(j);
                Log.e("PHOTO IDS", JOPhotoIDS.toString());
            }
        }

    }
}

ただし、logcat には常に次のエラーが表示されます。

12-13 15:54:36.390: W/System.err(5841): org.json.JSONException: Value 10151392619250579 at 0 of type java.lang.Long cannot be converted to JSONObject

明らかに、コーディングが間違っています。適切なアプローチ/コードがどうあるべきかについて、誰かが提案を提供できますか?

4

2 に答える 2

2

解析している部分photo_idsが間違っています。次のようにする必要があります。

if (JOAppData.has("photo_ids")) {
        JSONArray JAPhotoIDS = JOAppData.getJSONArray("photo_ids");
        Log.e("JAPhotoIDS", JAPhotoIDS.toString());

        for (int j = 0; j < JAPhotoIDS.length(); j++) {
            String id = JAPhotoIDS.getString(j);
            Log.e("PHOTO IDS", id);
        }
    }
于 2012-12-13T10:32:32.620 に答える
1

JSONArray JAPhotoIDS には、Long(JSONObject ではなく) の配列が含まれています。代わりに

JSONObject JOPhotoIDS = JAPhotoIDS.getJSONObject(j);

使用する

Long lPhotoIDS = JAPhotoIDS.getLong(j);
于 2012-12-13T10:32:34.733 に答える