2013-02-18 88 views
1

我似乎无法得到JSON数组中的第二层。 我想要的是,从类别中获取所有名称,然后我想通过意图将“论坛ID”发送到不同的活动。
如果有帮助,我跟着这个tutorial,我让我的JSON数组从here我如何获得已经在JSONArray中的JSONArray

部分JSON阵列的

{ 
"categories": [{ 
    "name": "Facepunch", 
    "forums": [{ 
     "id": 6, 
     "name": "General Discussion", 
     "viewing": 217 
    }, { 
     "id": 60, 
     "name": "Fast Threads", 
     "viewing": 188 
    }, { 
     "id": 64, 
     "name": "Videos And Flash Movies and That Kind Of Crap", 
     "viewing": 239 
    }, { 
     "id": 403, 
     "name": "Mass Debate", 
     "viewing": 9 
    }, { 
     "id": 396, 
     "name": "Sensationalist Headlines", 
     "viewing": 455 
    }, { 
     "id": 51, 
     "name": "In The News Node", 
     "viewing": 100 
    }] 
    }] 
} 

我的代码部分

try { 
    // Getting Array of Contacts 
categories = json.getJSONArray(TAG_CATEGORIES); 
forums = json.getJSONArray(TAG_FORUMS); 

// looping through All categories 
for(int i = 0; i < categories.length(); i++){ 
    JSONObject c = categories.getJSONObject(i); 


    // Storing each json item in variable 
    String CatName = c.getString(TAG_CATName); 

    // Phone number is agin JSON Object 
      JSONObject All_forums = forums.getJSONObject(i); 
      String forum_id = All_forums.getString(TAG_FORUMS_ID); 
      String forum_name = All_forums.getString(TAG_FORUMS_NAME); 

     // creating new HashMap 
     HashMap<String, String> map = new HashMap<String, String>(); 

     // adding each child node to HashMap key => value 
    map.put(TAG_CATName, CatName); 
    map.put(TAG_FORUMS, forum_name); 


    // adding HashList to ArrayList 
    contactList.add(map); 
} 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

回答

2

为了让你有一个类论坛的阵列来调用

forums = c.getJSONArray(TAG_FORUMS); 

您的for循环中。之后,您可以遍历论坛来获取他们的ID和名称。

代码示例:

categories = json.getJSONArray(TAG_CATEGORIES); 
for(int i = 0; i < categories.length(); i++) { 
    JSONObject c = categories.getJSONObject(i); 
    forums = c.getJSONArray(TAG_FORUMS); 
    for(int j = 0; j < forums.length(); j++){ 
     JSONObject f = forums.getJSONObject(j); 
     String forum_id = f.getString(TAG_FORUMS_ID); 
     String forum_name = f.getString(TAG_FORUMS_NAME); 
     … 
    } 
} 
+0

当我作出这样的循环,它似乎只输出JSON数组(称为嗜好)中的最后一项。即使是第一个循环内部的循环。 – dasmikko 2013-02-18 14:59:17

+0

也许你正在以错误的方式存储值?尝试通过在内部循环内添加一个* System.out.println(forum_name)*来进行调试。 – nutlike 2013-02-18 15:05:56

+0

我显然保持覆盖键“名字”当我做内循环,当我映射HashMap中的键。 – dasmikko 2013-02-18 15:58:22

0

你应该使用Gson解析器。它非常简单和基本的用法比Android标准JSON解析器。你基本上解析。

为其中已存在json对象项的类创建对象或原始类型。

+0

是否有任何容易理解的GSON教程? – dasmikko 2013-02-18 14:30:20

+0

public String getClasstoJson(YourClass o)throws Exception \t { \t \t Gson gson = new Gson(); \t \t gson.toJson(o); \t \t return gson。的toString(); \t} \t公共对象getJsontoClass(YourClass O,字符串JSON)抛出异常 \t { \t \t GSON GSON =新GSON(); \t \t尝试{ \t \t \t Object st = o.getClass()。newInstance(); \t \t \t st = gson.fromJson(json.toString(),st.getClass()); \t \t \t return st; \t \t}赶上(IllegalAccessException E){ \t \t \t // TODO自动生成的catch程序块 \t \t \t e.printStackTrace(); \t \t}赶上(InstantiationException E){ \t \t \t // TODO自动生成的catch程序块 \t \t \t e.printStackTrace(); \t \t} \t \t return null; \t} – nurisezgin 2013-02-18 14:40:28

1

你必须得到来自该类别的JSONObject第二层。

try { 
// Getting Array of Contacts 
categories = json.getJSONArray(TAG_CATEGORIES); 

// looping through All categories 
for(int i = 0; i < categories.length(); i++){ 
    JSONObject c = categories.getJSONObject(i); 

    forums = c.getJSONArray(TAG_FORUMS); 

    ... 
} 
0

尝试这种情况:
//联系人的获取阵列
类别= json.getJSONArray(TAG_CATEGORIES);
forums = categories.getJSONArray(TAG_FORUMS);

//通过所有种类循环
对(INT I = 0;我< forums.length();我++){
的JSONObject C = forums.getJSONObject(ⅰ);
//你的代码....
}

0

简单的用法

public String getClasstoJson(Object o) throws Exception 
{ 
    Gson gson = new Gson(); 
    gson.toJson(o); 
    return gson.toString(); 
} 

public Object getJsontoClass(Object o,String json) throws Exception 
{ 

    Gson gson = new Gson(); 

    try { 
     Object st = o.getClass().newInstance(); 
     st= gson.fromJson(json.toString(), st.getClass()); 
     return st; 

    }catch (IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (InstantiationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return null; 
}