我想从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]);
}
}
答案 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,然后创建一个模型类来代表它。