android 嵌套json数据,如何从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,所以请,我迷路了!我需要一些帮助,至少知道这是否可行。

先感谢您!!! :)

答案

这是一个关于如何从示例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等。

这里有一些我用的 -

另一答案

这里整个文档是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类:

比使用Gson解析Json:

ResponseData response = gson.fromJson(jsonString, ResponseData.class);

你可以从响应中访问任何值。

我没有使用JsonArray和JsonObject显示基本的Json解析,因为你的json非常嵌套。所以最好使用Gson

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值