2012-01-31 40 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);