2012-01-31 83 views
0

我正面臨JSON問題,不知道如何處理它。我試圖獲得一個JSONArray,儘管應用程序永遠不會知道這個數據集的相應名稱。例如,我們有類似下面的數據集:Android JSONArray問題

{"Kobe":[{"Location":"LA","Position":"PG"}]} 

通常以獲得與科比相對應的值,我會用: contentArray = json.getJSONArray("Kobe");

通過這樣做,我會獲得一個有兩個元素的數組,位置和位置。我的問題是,如果我不知道名稱是「科比」會發生什麼。我需要在運行時以某種方式動態獲取適當的名稱傳遞給.getJSONArray()函數。應用程序是盲目的,並且不知道名稱值對,直到數據實際從服務器到達。任何想法,想法,代碼片段都是受歡迎的。

謝謝。

回答

0

這應該爲你工作:

String value = "{\"Kobe\":[{\"Location\":\"LA\",\"Position\":\"PG\"}]}\r\n"; 
JSONObject obj = new JSONObject(value); 
JSONArray array = null; 
for (Iterator<?> keys = obj.keys(); array == null && keys.hasNext();) { 
    array = obj.optJSONArray((String) keys.next()); 
} 
// array will now contain null if no array was found or the first array encountered. 
1

查看api JsonObject,有一種方法來獲取返回迭代器的鍵。你應該可以使用它並遍歷密鑰。

+0

是什麼恰恰意味着?返回此對象中字符串名稱的迭代器。 – 2012-01-31 21:37:34

+0

Android/Java中的HashMap或Iterator類的其他一些良好用例何時使用?有人知道嗎? – 2012-01-31 22:14:24

0

你可以嘗試像

JSONObject json = new JSONObject("{\"key1\":\"String\",\"key2\":[1,2,3,4,5], \"key3\":[\"str1\", \"str2\"]}"); 
      Iterator<String> keys = json.keys(); 
      for(;keys.hasNext();) { 
       String key = keys.next(); 
       Object obj = json.get(key); 
       if (obj instanceof JSONArray) { 
        JSONArray array = (JSONArray) obj; 
        Log.d("Ololo", array.toString()); 
       } 
      } 
+0

Iterator keys = json.keys()會更好,json.keys()不返回參數化/泛型迭代器。 – Jens 2012-01-31 20:42:12

+0

剛剛看到一些非常相似的東西,謝謝!看起來很有希望。 – 2012-01-31 21:55:35

0

我使用的庫google.com.gson

在這種情況下,你可以只用一個映射您的JSON對象簡單的課程,然後通過這些數組:

... 
class Coordinates { 
    String location; 
    String position; 
} 
... 

那麼你可以使用的方法fromJson這樣的:

Coordinates[] array = fromJson(data, Coordinates[].class);