2012-04-10 6 views
1

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

は、私が使用しているタラです:

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のように見えるべきか?

+0

あなたはいつも同じキーにアクセスしています: 'country.getString(" country_name ")'他に何がありますか?また、私は 'keys.hasNext()'がイテレータを実際に進めないと仮定します。 –

+0

私は 'country_name'を含む50個のJSONObjectsを持っていますが、これはまさに最初の例です。 –

+0

Mmmh ...まあ、あなたは無限のwhileループを持っていますが、実際には新しい値を 'country'に割り当てることは決してありません。すべてのキーを繰り返し処理し、そのキーの国オブジェクトを取得し、その値にアクセスする必要があります。現在、最初の国要素を取得しています。キーを取得し、イテレータにキーが含まれているかどうかを確認してください。しかし、イテレータを進めているわけではありません。 –

答えて

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に新しい値を割り当てることはありません。

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

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

+0

'json.keys()。next()'は常に最初のアイテムを返します(毎回新しいイテレータを作成します) – assylias

+0

Ohええ、その部分を変更するのを忘れてしまった、ありがとう! –

+0

私はエラーを認識し、問題を解決しました。答えに感謝します! –

1

は、あなたのコードはすべきではない:それは、次のいずれかを取得次、決してを持っている場合、コードは単にチェックするので、それは国の名前の上にループをdoen't

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

。 でもコードの残りの部分もうまくいかないようです。最初にjson.keys()をローカル変数に取得し、それを反復処理する必要があります。

関連する問題