2012-04-10 24 views
1

我; m試圖解析從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()'實際上並不提前迭代器。 – 2012-04-10 10:15:47

+0

我有50個包含'country_name'的JSONObjects,這只是第一個例子。 – 2012-04-10 10:16:52

+0

呃...好吧,在我看來,你有一個無盡的'while'循環,它實際上從來沒有出去給'country'分配一個新的值。您必須遍歷所有密鑰,獲取密鑰的國家對象,然後訪問它的值。目前,您正在獲取第一個國家/地區元素,獲取密鑰並檢查迭代器是否包含密鑰。但是你並沒有推進迭代器。 – 2012-04-10 10:18:36

回答

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分配新值。

您必須迭代所有鍵,獲取鍵的國家對象,然後訪問它的值。

當前您正在獲取第一個country元素,獲取鍵並檢查迭代器是否包含鍵。但是你並沒有推進迭代器。

+0

'json.keys()。next()'將始終返回第一個項目(它每次創建一個新的迭代器) – assylias 2012-04-10 10:24:06

+0

是的,忘了改變那部分,謝謝! – 2012-04-10 10:24:43

+0

我意識到錯誤並解決了問題。謝謝你的回答! – 2012-04-10 11:01:42

1

應該不是你的代碼是:

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

它doen't在國名循環,因爲代碼只是檢查其是否具有未來和永遠不會進入下一個。 但是代碼的其餘部分似乎也不工作。你需要首先獲取json.keys()到一個局部變量,然後迭代它。