我正在尝试从API服务获取所有数据,但我在访问JSON响应中的不同“级别”时遇到问题。
我认为当内在级别包含[]
我在这里展示了JSON响应的缩减部分(整个响应很大)。但这部分清楚地代表了我的问题
{
“CustomerList”:{
“CustomerType”:”residential”,
“maxAllowed”:”256”,
"serverdate":"2017-05-02",
“Purchases”:[
{
“Car”:[
{
“customerName”:”Fredrik”,
“price”:”25890”,
“currency”:”EUR”,
“Item”:{
“code”:”Audi”,
“model”:”A3”,
“engine”:”diesel”,
“data”:”2017-03-12”,
"$":"\n"
},
"Destination":{
“country”:”Germany”,
“arrivalDate”:”March 25”,
"id":"02201403",
我可以像这样访问CustomerList
和Purchases
JSONObject customer = (JSONObject) response.get("CustomerList");
JSONArray purchases = customer.getJSONArray("Purchases");
但是现在我在访问Car
,Item
或Destination
等内部字段及其元素时遇到了麻烦。
以下内容为我JSONException
for (int i = 0;i< purchases.length();i++){
JSONObject car = purchases.getJSONObject(i);
String custName = car.getString("customerName");
答案 0 :(得分:1)
Car是JSONArray
,而不是JSONObject
for (int i = 0;i< purchases.length();i++){
JSONArray array = purchases.getJSONArray(i);
for (int j = 0; j < array.length(); j++){
// loop through here again to get the JSONObject
}
}
在内部循环中,您获得JSONObject
并可以调用
String custName = array.getJSONObject(j).getString("customerName");
如果你看一下例外,你可能会看到像you cannot cast a ... to a JSONObject
答案 1 :(得分:1)
在你的情况下,你得到了错误的对象,
购买是一个JSONArray,它包含假定的类Purchase
的对象。它的每个实例都有一个名为Car(包含Cars)的JSONArray实例。
鉴于此,访问第一个汽车的方式是:
for (int i = 0;i< purchases.length();i++){
JSONObject p = purchases.getJSONObject(i);
JSONObject car = p.getJSONObject(0);
String custName = car.getString("customerName");
我鼓励您强烈使用像gson这样的JSON序列化程序来避免处理这些问题。看一下jsonschema2pojo来生成层次结构的类
答案 2 :(得分:0)
Car也是parentKey
,请尝试如下:
JSONArray