Android 如何从另一个json对象中获取值,其中键是动态的
我想从下面的json响应中获取值。我可以从第一个关键点获取值,但不能从另一个关键点对象获取值。我想得到所有url的值,但url的值不是动态的,也是关键的。以下是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":
{
"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();
}