1

Web サーバーから応答として受け取った json 文字列を解析しようとしていますが、奇妙な問題があります。私のjsonにはいくつJSONObjectsかありますが、それらの名前がどうなるかはわかりません。その量に応じてそれらを循環させる必要keysがあります。しかし、問題は、私が使用しているコードにあり、他の値もあることがわかっている場合でも、毎回同じ値を取得しています。

これが私が使用しているタラです:

JSONObject json = (JSONObject) new JSONTokener(jsonBuffer).nextValue();


        JSONObject country = json.getJSONObject(String.valueOf(json.keys().next()));
        Iterator<Object> keys = json.keys();
        while (keys.hasNext()) {


            String countryName = country.getString("country_name");
            Log.e("","country_name: "+countryName);

            String data = country.getString("data");
            Log.e("","data : "+data);
        }

そして、ここに私のjsonがどのように見えるかがあります:

"AZ": {
    "country_name": "Azerbaijan",
    "data": {
        "181261": {
            "time_published": "2012-04-04 15:55:29",
            "title": "Azerbaijan, Turkey not to change stakes in TANAP",
            "body": null
        },
        "181260": {
            "time_published": "2012-04-04 15:53:10",
            "title": "SOCAR mulls acquisition of Swiss refinery",
        },
        "181061": {
            "time_published": "2012-04-03 05:53:00",
            "title": "Azerbaijan, Lithuania mull LNG terminal investment",
        },
        // and so on....
    }
}, // and it keeps going on 

私の jsonParser がどのように見えるかについてのアイデアはありますか?

4

3 に答える 3

2

私はAndroidとJavaにあまり精通していませんが、次のようになっていると思います。

// parse JSON
JSONObject json = (JSONObject) new JSONTokener(jsonBuffer).nextValue();

// get all keys (they are probably strings)
Iterator<String> keys = json.keys();

// as long as there are more keys
while (keys.hasNext()) {
    // get the object corresponding to the next key
    JSONObject country = json.getJSONObject(keys.next());

    String countryName = country.getString("country_name");
    Log.e("","country_name: "+countryName);

    String data = country.getString("data");
    Log.e("","data : "+data);
}

私のコメントから:

無限ループがあるように見えますが、while実際には、に新しい値を割り当てることはできませんcountry

すべてのキーを繰り返し処理し、キーの国オブジェクトを取得してから、その値にアクセスする必要があります。

現在、最初の国の要素を取得し、キーを取得して、イテレータにキーが含まれているかどうかを確認します。しかし、あなたはイテレータを進めていません。

于 2012-04-10T10:22:30.720 に答える
1

あなたのコードは次のようにすべきではありません:

    Iterator<Object> keys = json.keys();
    while (keys.hasNext()) {
        JSONObject country = json.getJSONObject(String.valueOf(keys.next()));
        //etc.
    }
于 2012-04-10T10:22:41.327 に答える
1

コードは次のものがあるかどうかをチェックするだけで、次のものに到達しないため、国名をループしません。しかし、残りのコードも機能していないようです。最初に json.keys() をローカル変数に取得してから、それを反復処理する必要があります。

于 2012-04-10T10:35:39.947 に答える