Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从另一个json对象中获取值,其中键是动态的_Android_Json_Android Json - Fatal编程技术网

Android 如何从另一个json对象中获取值,其中键是动态的

Android 如何从另一个json对象中获取值,其中键是动态的,android,json,android-json,Android,Json,Android Json,我想从下面的json响应中获取值。我可以从第一个关键点获取值,但不能从另一个关键点对象获取值。我想得到所有url的值,但url的值不是动态的,也是关键的。以下是json响应: 我能够获得正文、标题和创建日期的价值 { "17": { "27": { "url": "some text here 1" }, "28": { "url": "some text here 12" }, "29": { "url":

我想从下面的json响应中获取值。我可以从第一个关键点获取值,但不能从另一个关键点对象获取值。我想得到所有url的值,但url的值不是动态的,也是关键的。以下是json响应:

我能够获得正文、标题和创建日期的价值

{
"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]);
            }
        }
试试看{
json=新的JSONTokener(jsonNewsResponse).nextValue();
if(JSONObject的json实例){
JSONObject JSONObject=(JSONObject)json;
迭代器keys=jsonObject.keys();
while(keys.hasNext()){
nid=String.valueOf(keys.next());
JSONObject jsonObj=JSONObject.getJSONObject(nid);
attributeValue=jsonObj.getString(attributeName);
List listitems=new ArrayList();
迭代器key=jsonObj.keys();
while(key.hasNext()){
String fid=String.valueOf(key.next());
系统输出打印项次(“FID”+FID);
系统输出打印项次(“FID”+FID);
系统输出打印项次(“FID”+FID);
系统输出打印项次(“FID”+FID);
JSONObject jObject=jsonObj.getJSONObject(fid);
添加(jObject.getString(“url”);
}
附件=listitems.toArray(新字符串[0]);
}
}
当然,你可以随心所欲地扩展它

当然,您可以根据需要扩展它。

使用

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

因此,我建议您修复Json,然后创建一个模型类来表示它。

使用

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

因此,我建议您修复Json,然后创建一个模型类来表示它。

试试这个

    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();
    }
jsonobjectjobj;
试一试{
Jobj=新的JSONTokener(jsonNewsResponse).nextValue();
if(JSONObject的Jobj实例){
JSONObject JSONObject=(JSONObject)Jobj;
迭代器keys=jsonObject.keys();
while(keys.hasNext()){
String nid=String.valueOf(keys.next());
JSONObject jsonObj=JSONObject.getJSONObject(nid);
迭代器key=jsonObj.keys();
while(key.hasNext()){
String fid=String.valueOf(key.next());
Log.v(“fid--”、“fid+fid”);
if(JSONObject.get(fid)JSONObject实例){
JSONObject jObject=jsonObj.getJSONObject(fid);
字符串url=jObject.getString(“url”);
Log.v(“url--”和“+url”);
}否则{
字符串fidfadd=jsonObj.getString(fid);
Log.v(“fidfadd--”和“+fidfadd”);
}
}
}
}
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试试这个

    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();
    }
jsonobjectjobj;
试一试{
Jobj=新的JSONTokener(jsonNewsResponse).nextValue();
if(JSONObject的Jobj实例){
JSONObject JSONObject=(JSONObject)Jobj;
迭代器keys=jsonObject.keys();
while(keys.hasNext()){
String nid=String.valueOf(keys.next());
JSONObject jsonObj=JSONObject.getJSONObject(nid);
迭代器key=jsonObj.keys();
while(key.hasNext()){
String fid=String.valueOf(key.next());
Log.v(“fid--”、“fid+fid”);
if(JSONObject.get(fid)JSONObject实例){
JSONObject jObject=jsonObj.getJSONObject(fid);
字符串url=jObject.getString(“url”);
Log.v(“url--”和“+url”);
}否则{
字符串fidfadd=jsonObj.getString(fid);
Log.v(“fidfadd--”和“+fidfadd”);
}
}
}
}
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}

如果我们几乎同时给出的答案不能证明他应该怎么做,我不知道是什么!你能更清楚一点吗?我是说我们都告诉他“使用Gson”“,很明显,他应该使用Gson。我只是觉得我们说的几乎是同一件事很有趣。哦:)是的,因为每种语言或任何地方的真理都是真理:)我在我的项目中添加了Gson库,我不知道如何使用
YourObjectsClass yourObject = new Gson().fromJson(json, YourObjectsClass.class)
    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();
    }