1

私はJSONの初心者です...

Javaプログラムで次のJSONオブジェクトから「3037904」の値を取得するにはどうすればよいですか?

{"query":{"pages":{"3037904":{"pageid":3037904、 "ns":0、 "title": "Kempinski"、 "categories":[{"ns":14、 "title ":"カテゴリ:1897年に設立された会社 "}、{" ns ":14、" title ":"カテゴリ:ホテルチェーン "}、{" ns ":14、" title ":"カテゴリ:ケンピンスキーホテル "}] }}}}

私がしようとしました

JSONObject query = json.getJSONObject("query");
int pages = query.getInt("pages");

しかし、それはかかります

"{"3037904":{"pageid":3037904,"ns":0,"title":"Kempinski",
"categories":[{"ns":14,"title":"Category:Companies established in 1897"},{"ns":14,"title":"Category:Hotel chains"},{"ns":14,"title":"Category:Kempinski Hotels"}]}}}}", 

「3037904」だけではありません。

4

2 に答える 2

4

でもう少し作業を行う必要がありますJSONObject

この回答では、あなたがその値を取得したいと仮定しますpageid

ネスト内に存在することだけを想定しましょうpageid-特定のレベルで:

// "query" is the top-level object: 
JSONObject query = json.getJSONObject("query");
// "pages" is a field of "query"
JSONObject pages = query.getJSONObject("pages");

// these will hold the object with the value that you want, and that value:
JSONObject nestedObject = null;
int pageId = 0;

// these are the property names in the "pages" object:
String[] keys = pages.getNames(pages);

// iterate over the keys in the "pages" object, looks for JSONObjects:
for (int i = 0; i < keys.length; i++)
{
    try
    {
        nestedObject = pages.getJSONObject(keys[i]);
        // only consider objects with a "pageid" key, stop at the first one:
        if (nestedObject.has("pageid"))
            break;
    }
    catch (JSONException je)
    { ; }
}

if (nestedObject != null)
   pageId = nestedObject.getInt("pageid");

JSON入力は、最初のネストされたオブジェクトpagesに別のオブジェクトを含むフィールドがあるという点で独特のようです。複数形の名前、、、pagesおよびネストされたオブジェクト(オブジェクトを含むキーをオブジェクトpageidのキーとして複製する)は、複数のそのようなオブジェクトの配列である必要があることを示しています。pages

于 2012-08-10T14:27:41.533 に答える
0

GSONライブラリをご覧ください:http ://code.google.com/p/google-gson/

ここに良い例があります:https ://sites.google.com/site/gson/gson-user-guide#TOC-Primitives-Examples

Gson gson = new Gson();

Map map = gson.fromJson("{\"query\":{\"pages\":{\"3037904\":{\"pageid\":3037904,\"ns\":0,\"title\":\"Kempinski\", \"categories\":[{\"ns\":14,\"title\":\"Category:Companies established in 1897\"},{\"ns\":14,\"title\":\"Category:Hotel chains\"},{\"ns\":14,\"title\":\"Category:Kempinski Hotels\"}]}}}}", HashMap.class);

Map query = (Map) map.get("query");
Map pages = (Map) query.get("pages");
System.out.println(pages.keySet());

Map page = (Map) pages.get("3037904");
System.out.println(page);
System.out.println(page.get("pageid"));
于 2012-08-10T14:24:59.150 に答える