2017-12-05 2 views
1

Ich habe dieses JSONWie ein JSON-Objekt zuzugreifen, die in ein Objekt keinen Namen hat

{ 
    "success": true, 
    "shippingMethod": [ 
     { 
      "flat": { 
       "code": "flat.flat", 
       "title": "Flat Shipping Rate", 
       "cost": "5.00", 
       "tax_class_id": "9", 
       "text": "$5.00" 
      } 
     }, 
     { 
      "zajil": { 
       "code": "zajil.zajil", 
       "title": "Zajil Shipping", 
       "cost": "26", 
       "tax_class_id": "0", 
       "text": "$26.00" 
      } 
     } 
    ] 
} 

Hinweis, dass jeder echte object in array innerhalb eines unnötigen Objekt ist, das keinen Namen dh flat hat und zajil in dem obigen Code sind in einem anderen Objekt.
Ich brauche nur die Daten innerhalb dieser verschachtelten Objekte flat und zajil. Wenn ich versuche, diesen Code

JSONArray shippingMethods = response.optJSONArray("shippingMethod"); 
      for (int i = 0; i < shippingMethods.length(); i++) { 
      JSONObject shippingObj = shippingMethods.optJSONObject(i); 
      JSONObject shippingMethod = shippingObj.optJSONObject(""); 
      Iterator<?> keys = shippingObj.keys(); 
      shippingMethod.optString("title"); 
      shippingMethod.optString("cost"); 
     } 

sollte ich mich kann die Object bekommen, das keinen Namen wie

JSONObject shippingMethod = shippingObj.optJSONObject(""); 

hat, aber es funktioniert nicht und wirft NullPointerException wenn etwas von ihm zu bekommen. Dann versuche ich zu iterate für keys wie

Iterator<?> keys = shippingObj.keys(); 

Es zeigt nichts als dieses Objekt nicht eine beliebige Taste direkt enthält. Also meine Frage ist wie bekomme ich die benötigten Daten title und cost von oben JSON. Ich kann nicht ändern JSON wie es ist die Standardstruktur der Website des Kunden.

Jede Hilfe wäre willkommen. Alle Objekte haben Namen in Ihrem JSON

Antwort

0

Wie ein JSON-Objekt zuzugreifen, die in einem Objekt

keinen Namen hat.

Ich brauche nur die Daten innerhalb dieser verschachtelten Objekte flach und Zajil.

flat und zajil sind die Namen der Objekte. Die Tatsache, dass Sie sich nicht um diese Namen kümmern, bedeutet nicht, dass die Namen nicht existieren.

Wenn Ihr JSON eingerichtet ist, dass jedes dieser Objekte genau ein verschachteltes Objekt enthält, verwenden Sie keys() oder names(), um den Namen zu finden, und rufen Sie das Objekt unter diesem Namen ab. Sie versuchen, das Objekt von "" abzurufen, und weder flat noch zajil sind "".

Es zeigt nichts als dieses Objekt direkt

Ja, tut es keinen Schlüssel enthalten. Die Schlüssel sind flat bzw. zajil.

Wenn i0, wird shippingMethods.optJSONObject(i) zurückkehren ein JSONObject enthält:

{ 
     "flat": { 
      "code": "flat.flat", 
      "title": "Flat Shipping Rate", 
      "cost": "5.00", 
      "tax_class_id": "9", 
      "text": "$5.00" 
     } 
    } 

Aufruf keys() an diesem JSONObject wird eine Iterator zurückkehren; Wenn Sie den ersten Wert erhalten, ist dieser Wert flat.

+0

Dank kann helfen @CmmonsWare aber das Problem ist, diejenigen Objekte 'flat' und' zajil' sind innerhalb eines anderen übergeordneten Objekt, das Problem verursacht wird, das keinen Namen hat. –

+1

@InzimamTariqIT: Sie erhalten diese per Index aus dem 'JSONArray' (' shippingMethods.optJSONObject (i) '). – CommonsWare

+0

Ich habe 'Iterator keys = shippingObj.keys(); 'in meinem Code & ausgedruckt Tasten, aber nicht beobachtet Keys in Logcat, so dass ich verwirrt. Jetzt habe ich mein logcat gefiltert die Schlüssel sind da. –

1

wie diese versuchen, Sie

//get response 
JSONObject jsonObject = new JSONObject("response"); 

//get status 
boolean success = jsonObject.getBoolean("success"); 

if(success){ 
    //get jsonarray from response 
    JSONArray shippingMethodArray = jsonObject.getJSONArray("shippingMethod"); 

    //iterate array 
    for(int i=0; i<shippingMethodArray.length(); i++){ 

     jsonObject = shippingMethodArray.getJSONObject(i); 

     //get all keys from jsonObject 
     List<String> allKeys = getAllKeys(jsonObject); 

     //iterate all keys 
     for(String key: allKeys) { 

      //get jsonObject by key 
      jsonObject = jsonObject.getJSONObject(key); 

      //get data 
      String title = jsonObject.getString("title"); 
      String cost = jsonObject.getString("cost"); 
     } 
    } 
}else { 
    //do if not success... 
} 


//returns all keys from jsonobjects 
private List<String> getAllKeys(JSONObject jsonObject) throws JSONException{ 
    List<String> keys = new ArrayList<String>(); 

    Iterator<?> iterator = jsonObject.keys(); 
    while(iterator.hasNext()) { 
     String key = (String)iterator.next(); 
     keys.add(key); 
    } 
    return keys; 
} 
+0

Bitte akzeptieren Sie die Antwort, wenn Sie geholfen haben ... –

+0

Danke +1 für Ihre Hilfe. Ich hatte bereits den Arbeitscode Aber verwirrt beim Logcat. Als ich meinen Logcat filterte, sah ich, dass mein Code in Ordnung war und wie erwartet funktionierte –

Verwandte Themen