如何从Java Android中的嵌套JSON获取数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从Java Android中的嵌套JSON获取数据相关的知识,希望对你有一定的参考价值。
我需要从API获取我的应用程序的信息。问题是API响应是具有以下格式的JSON:
{
"jsonapi":{
"data":[
{
"id":"id_id",
"name":{
"en":"nombre en ingles",
"es":"nombre en español"
},
"company":{
"id":"id_company",
"name":"nombre company"
},
"city":{
"id":"id_city",
"name":{
"en":"nombre en ingles ciudad",
"es":"nombre en español ciudad"
}
},
"province":{
"id":"id_province",
"name":{
"en":"nombre en ingles provincia",
"es":"nombre en español provincia"
}
}
},
{
"id":"id_id2",
"name":{
"en":"nombre en ingles 2",
"es":"nombre en español 2"
},
"company":{
"id":"id_company 2",
"name":"nombre company 2"
},
"city":{
"id":"id_city 2",
"name":{
"en":"nombre en ingles ciudad 2",
"es":"nombre en español ciudad 2"
}
},
"province":{
"id":"id_province 2",
"name":{
"en":"nombre en ingles provincia 2",
"es":"nombre en español provincia 2"
}
}
},
{
"id":"id_id 3",
"name":{
"en":"nombre en ingles 3",
"es":"nombre en español 3"
},
"company":{
"id":"id_company 3",
"name":"nombre company 3"
},
"city":{
"id":"id_city",
"name":{
"en":"nombre en ingles ciudad 3",
"es":"nombre en español ciudad 3"
}
},
"province":{
"id":"id_province 3",
"name":{
"en":"nombre en ingles provincia 3",
"es":"nombre en español provincia 3"
}
}
}
]
},
"city":{
"latitude":"-333",
"longitude":"111"
}
}
我知道从JSON获取信息的唯一方法是使用JSONObject,但如果我做object.getString("name")
我会得到什么?因为“名称”属性无处不在。是否有可能做像object.getString("data").getString("name")
这样的事情?但如果是这样,我仍然有同样的问题导致内部数据有很多“名称”属性。
当其他JSON中有JSON时,有没有办法获得特定属性?如果是这样,怎么样?
我不确定这可以用GSON完成,我是android的新手,这是我的学习项目,我几乎不知道如何使用JSONObject和JSONArray,所以请,我迷路了!我需要一些帮助,至少知道这是否可行。
先感谢您!!! :)
您将获得的“名称”值取决于您查询JsonObject的方式。您可以在这里阅读有关JsonObject定义和https://developer.android.com/reference/org/json/JSONObject.html的查询结构的信息
这是一个关于如何从示例JSON中检索特定属性值的快速存根。
JSONObject mainObject = new JSONObject(json_data_in_a_string);
JSONObject jsonAPI = mainObject.getJSONObject("jsonapi");
JSONArray array = (JSONArray)jsonAPI.get("data");
for (int i = 0; i < array.length(); i++) {
JSONObject childObject = array.getJSONObject(i);
String id = childObject.getString("id");
JSONObject name = childObject.getJSONObject("name");
String name_en= name.getString("en");
String name_es = name.getString("es");
JSONObject company = childObject.getJSONObject("company");
String company_id = company.getString("id");
String company_name = company.getString("name");
}
您还可以创建POJO以轻松读取JSON中的值。有几种工具可以在线获取如何生成pojo类,验证json等。
这里有一些我用的 -
http://www.jsonschema2pojo.org/
这里整个文档是JSONObject
,它有一个名为jsonapi
的密钥对值,其值为嵌套的JSONObject
。获取名为JSONObject
的jsonapi
JSONObject jo = (JSONObject) obj;
JSONObject jsonApi = (JSONObject)jo.get("jsonapi");
然后这个JSON
对象有一个密钥对值与密钥data
,其中包含array of JSON objects
。
JSONArray array = (JSONArray)jsonAoi.get("data");
现在你可以iterate
数组得到JSONObject
的每个JSONArray
并形成你可以得到你的价值的每个对象,如name
,city
,company
。
首先正确解析您的Json并使用以下方法检查它是否正确:
稍后为您的json解析创建POJO或Model类:
http://pojo.sodhanalibrary.com/
比使用Gson解析Json:
ResponseData response = gson.fromJson(jsonString, ResponseData.class);
你可以从响应中访问任何值。
我没有使用JsonArray和JsonObject显示基本的Json解析,因为你的json非常嵌套。所以最好使用Gson
以上是关于如何从Java Android中的嵌套JSON获取数据的主要内容,如果未能解决你的问题,请参考以下文章
如何从 java / android 中的嵌套 json 对象访问数据? [复制]
如何使用 c# 从 ajax 中的嵌套 JSON 对象中获取值