如何获取值形式json对象里面形成另一个json对象,其中键aye dynimic

时间:2014-03-26 07:40:09

标签: android json android-json

我想从json响应中获取值。我能够从第一个键获得值,但不能获得其他关键对象。我想得到所有网址的值,但网址没有动态和关键。以下是json回复:

我能够获得body,title和created_date的值

{
"17": {
    "27": {
        "url": "some text here 1"
    },
    "28": {
        "url": "some text here 12"
    },
    "29": {
        "url": "some text here 123"
    },
    "title": "some text goes here",
    "body": "Some text goes here",
    "created_date": "1395386881"
 }
}

我正在尝试的代码如下:

try {
        json = new JSONTokener(jsonNewsResponse).nextValue();
        if (json instanceof JSONObject) {
            JSONObject jsonObject = (JSONObject) json;
            Iterator<?> keys = jsonObject.keys();
            while (keys.hasNext()) {
                nid = String.valueOf(keys.next());
                JSONObject jsonObj = jsonObject.getJSONObject(nid);
                attributeValue = jsonObj.getString(attributeName);
                    List<String> listitems = new ArrayList<String>();
                    Iterator<?> key = jsonObj.keys();
                    while (key.hasNext()) {

                        String fid = String.valueOf(key.next());
                        System.out.println("FID"+fid);
                        System.out.println("FID"+fid);
                        System.out.println("FID"+fid);
                        System.out.println("FID"+fid);
                        JSONObject jObject = jsonObj.getJSONObject(fid);
                        listitems.add(jObject.getString("url"));
                    }
                    attachments = listitems.toArray(new String[0]);
            }
        }

3 个答案:

答案 0 :(得分:2)

试试这个..

    JSONObject Jobj;
    try {
        Jobj = new JSONTokener(jsonNewsResponse).nextValue();
        if (Jobj instanceof JSONObject) {
            JSONObject jsonObject = (JSONObject) Jobj;
            Iterator<?> keys = jsonObject.keys();
            while (keys.hasNext()) {
                String nid = String.valueOf(keys.next());
                JSONObject jsonObj = jsonObject.getJSONObject(nid);
                    Iterator<?> key = jsonObj.keys();
                    while (key.hasNext()) {
                        String fid = String.valueOf(key.next());
                        Log.v("fid--",""+fid);

                        if( jsonObj.get(fid) instanceof JSONObject){
                            JSONObject jObject = jsonObj.getJSONObject(fid);
                            String url = jObject.getString("url");
                                    Log.v("url--",""+url);
                        }else{
                                String fidfadd = jsonObj.getString(fid);
                                Log.v("fidfadd--",""+fidfadd);
                            }
                     }
            }
        }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

答案 1 :(得分:1)

Gson gson=new Gson();
Map<String,Object> myMap=gson.fromJson( "your_json_string_after_getting_first_body", Map.class );

map&#39; key =你的json对象的密钥。值是包含键和URL的jsonObjects。并且不要将你的整个json用于它。仅供参考。

"27": {
    "url": "some text here 1"
},
"28": {
    "url": "some text here 12"
},
"29": {
    "url": "some text here 123"
},

但当然你可以随意扩展它。 GSON

答案 2 :(得分:1)

使用Gson library

YourObjectsClass yourObject = new Gson().fromJson(json, YourObjectsClass.class)

现在我更仔细地看一下,我不确定json可以映射到Java中非常好的对象模型。你有字段的关键&#34; 27&#34;与具有真实String名称的字段在同一层上,例如&#34; title&#34;,但是它们具有不同类型的对象作为它们的值(一些具有字符串,一些具有包含一个具有名称&的字段的复杂对象#34; URL&#34)。但是,Java字段名称不能以数字开头,因此您无法从中创建普通的Java类,也无法从中创建地图,除非它是仅接受的地图<Object>作为其值,这不是理想的。

所以我建议你修复你的Json,然后创建一个模型类来代表它。