首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JSONObject内部多个JSONObjects的Android JSON解析

JSONObject内部多个JSONObjects的Android JSON解析
EN

Stack Overflow用户
提问于 2014-03-24 18:21:05
回答 7查看 31K关注 0票数 9

我有一个来自服务器的JSON字符串,它看起来像这样:

代码语言:javascript
复制
{
    "categories": {
        "0": {
            "term_id": "247",
            "name": "Content Curation"
        },
        "1": {
            "term_id": "50",
            "name": "Content Marketing"
        },
        "2": {
            "term_id": "2",
            "name": "Curation"
        },
        "3": {
            "term_id": "246",
            "name": "Inbound Marketing"
        },
        "4": {
            "term_id": "47",
            "name": "Marketing"
        },
        "5": {
            "term_id": "4",
            "name": "News Curation"
        },
        "6": {
            "term_id": "36",
            "name": "SEO"
        },
        "8": {
            "term_id": "248",
            "name": "Wordpress Content Curation"
        }
    }
}

我的任务是获取"term_id“和"name”字段的值。我曾经使用以下代码从当前的JSONObject中获取"categories“对象:

代码语言:javascript
复制
JSONObject jObject = new JSONObject(responceData);
JSONObject categoryObject = jObject.getJSONObject("categories");
JSONArray  jarray = new JSONArray("["+categoryObject.toString().substring(1,categoryObject.toString().length() - 1) + "]");

for(int i=0;i<jarray.length();i++)
{
     JSONObject jobj = jarray.getJSONObject(i);
     String term_id=jobj.getString("term_id");
     String name=jobj.getString("name");
}

categoryObject看起来像这样:

代码语言:javascript
复制
{
    "0": {
        "term_id": "247",
        "name": "Content Curation"
    },
    "1": {
        "term_id": "50",
        "name": "Content Marketing"
    },
    "2": {
        "term_id": "2",
        "name": "Curation"
    },
    "3": {
        "term_id": "246",
        "name": "Inbound Marketing"
    },
    "4": {
        "term_id": "47",
        "name": "Marketing"
    },
    "5": {
        "term_id": "4",
        "name": "News Curation"
    },
    "6": {
        "term_id": "36",
        "name": "SEO"
    },
    "8": {
        "term_id": "248",
        "name": "Wordpress Content Curation"
    }
}

但在那之后,我不知道如何获得这些字段。有没有办法从JSONObject中获取所有的JSONObject子代?

如果你有一个源代码或可以给我一个例子,请与我分享它。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-03-24 18:39:04

在这里您可以检索所有的json数据,请求一个特定的键和innerKey来获得您想要的,干杯

代码语言:javascript
复制
    try
    {   
        String jsonString="";//your json string here
        JSONObject jObject= new JSONObject(jsonString).getJSONObject("categories");
        Iterator<String> keys = jObject.keys();
        while( keys.hasNext() )
        {
            String key = keys.next();
            Log.v("**********", "**********");
            Log.v("category key", key);
            JSONObject innerJObject = jObject.getJSONObject(key);
            Iterator<String> innerKeys = innerJObject.keys();
            while( innerKeys.hasNext() )
            {
                String innerKkey = keys.next();
                String value = innerJObject.getString(innerKkey);
                Log.v("key = "+key, "value = "+value);
            }
        }
    }
    catch (JSONException e)
    {   e.printStackTrace();    }
票数 22
EN

Stack Overflow用户

发布于 2014-03-24 18:30:05

检查this answer,这样您就不需要知道键,只需遍历和访问内部对象,但作为JSONArray比作为对象更好,这样您就可以正常地遍历

代码语言:javascript
复制
for(int i = 0; i < array.length(); i++) {
    JSONObject obj = myArray.get(i);
    ....
}
票数 5
EN

Stack Overflow用户

发布于 2014-03-24 18:53:56

非常感谢艾哈迈德·德维克和汤姆·哈特的回答。这是解决方案的代码。

代码语言:javascript
复制
try
        {   

            JSONObject jObject= new JSONObject(responseData).getJSONObject("categories");
            Iterator<String> keys = jObject.keys();
            while( keys.hasNext() )
            {
                String key = keys.next();
                Log.v("**********", "**********");
                Log.v("category key", key);
                JSONObject innerJObject = jObject.getJSONObject(key);

                String name = innerJObject.getString("name");
                String term_id = innerJObject.getString("term_id");

                Log.v("name = "+name, "term_id = "+term_id);

            }
        }
        catch (JSONException e){
           e.printStackTrace();    
        }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22606572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档