Android:访问JSON响应中的级别

时间:2017-05-02 09:02:16

标签: java android json

我正在尝试从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",

我可以像这样访问CustomerListPurchases

    JSONObject customer = (JSONObject) response.get("CustomerList");
    JSONArray purchases = customer.getJSONArray("Purchases");

但是现在我在访问CarItemDestination等内部字段及其元素时遇到了麻烦。

以下内容为我JSONException

for (int i = 0;i< purchases.length();i++){
      JSONObject car = purchases.getJSONObject(i);
      String custName = car.getString("customerName");

3 个答案:

答案 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