0

我想从下面的 json 响应中获取值。我能够从第一个键而不是另一个键对象中获取值。我想获取所有 url 的值,但没有 url 是动态的和关键的。以下是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]);
            }
        }
4

3 回答 3

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();
    }
于 2014-03-26T08:45:24.977 回答
1
Gson gson=new Gson();
Map<String,Object> myMap=gson.fromJson( "your_json_string_after_getting_first_body", Map.class );

地图的键 = 你的 json 对象的键。值是包含键和 URL 的 jsonObjects。并且不要将整个 json 用于其中。仅用于以下部分。

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

但当然你可以随心所欲地扩展它。GSON

于 2014-03-26T07:44:17.683 回答
1

使用Gson 库

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

现在我更仔细地查看它,我不确定 json 是否可以映射到 Java 中非常好的对象模型。您有键为“27”的字段与具有真实字符串名称的字段(如“title”)位于同一层,但它们的值具有不同类型的对象(有些具有字符串,有些具有包含一个字段的复杂对象名称为“url”)。但是,Java 字段名称不能以数字开头,因此您不能用它制作普通的 Java 类,也不能用它制作映射,除非它是一个只接受<Object>其值的映射,这并不理想。

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

于 2014-03-26T07:45:59.373 回答