2017-05-02 5 views
-3

APIサービスからすべてのデータを取得しようとしていますが、JSONレスポンス内のさまざまな「レベル」にアクセスする際に問題が発生しています。Android:JSONレスポンスのレベルにアクセスする

私は内側のレベルは私がここにJSONレスポンス(応答全体が巨大である)の減少した部分を示すのです[]

が含まれている場合、私の主な問題が来ると信じています。しかし、この部分は私の問題は、私はしかし、今、私はCarItemまたはDestinationなどの内部フィールドにアクセスするトラブルやその要素を取得しています。この

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

CustomerListPurchasesにアクセスすることができました

{ 
   “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", 

明確に表します。以下は、私にJSONException

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

[JavaでJSONを解析する方法](http://stackoverflow.com/questions/2591098/how-to-parse-json-in-java ) –

答えて

1

、あなたは間違ったオブジェクトを取得している、

購入のオブジェクトが含まれていJSONArrayです:巧み
you cannot cast a ... to a JSONObject

+0

あなたのリンクから、その答えであるcgarridoをありがとうございました。異なる 'Car'を参照するクラスを作成するのは簡単ですが、コード内でどのように使用するのですか?最初のリンク 'gson'は動作しません。 – codeKiller

+0

リンクを修正しました。 Gsonは本当に使いやすく、ネットで例を探す。これはhttps://www.javacodegeeks.com/2013/08/getting-started-with-google-gson.htmlに役立つ可能性があります。それがあなたを助けたら私の答えを投票してください。 – crgarridos

+0

はい、それは助けて、実際に私の問題を解決し、投票して受け入れました!、ありがとうございます。 – codeKiller

1

カーを与える

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");

を呼び出すことができますあなたが例外を見れば、あなたはprobになりますあなたのケースでは

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

車もJSONArrayであるので、以下のようにしてみてくださいのようなものを参照してください想定されるクラスPurchase。また、そのすべてのインスタンスには、Carという名前のJSONArrayのインスタンス(Carsを含む)があります。

最初車にアクセスする方法がある、ということを考える:

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を見てください

関連する問題