2017-02-03 2 views
0

Dies ist das Beispiel JSON array vom Server.Android: JSONArray kann nicht in JSONObject konvertiert werden

[ 
    { 
     "users":{ 
     "uid":"5893048cc3a841.21437792", 
     "name":"Jakob Nolan", 
     "email":"[email protected]" 
     } 
    }, 
    { 
     "users":{ 
     "uid":"589308eb640e79.86708812", 
     "name":"Donald Trump", 
     "email":"[email protected]" 
     } 
    } 
] 

Ich versuche JSONArray und JSONObject zu verwenden, innerhalb der Werte zu erhalten. Also habe ich einen Code wie folgt geschrieben.

String strResponse = response.body().string(); 
    Log.i("Superman", strResponse); 
    try { 
     JSONObject jsonObject = new JSONObject(strResponse); 
     boolean error = jsonObject.getBoolean("error"); 
     Log.i(TAG, ""+error); 

     if(!error) { 
      JSONArray people = jsonObject.getJSONArray("users"); 
      JSONObject obj = people.getJSONObject(0); 
      final String name = obj.getString("name"); 
      Log.i("TAG", name); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(MainActivity.this, "it works! ", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } else { 
      final String strError = jsonObject.getString("error_msg"); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(getApplicationContext(), strError, Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      hideDialog(); 
     } 
    } catch (final JSONException e) { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       Log.i(TAG, "JSONException caught: " + e.getMessage()); 
      } 
     }); 

lief ich den Code oben, und ich bekam die JSONException wie folgt.

02-03 17:22:14.091 27684-27684/com.marshall.authentication I/MainActivity: JSONException caught: Value [{"users":{"uid":"5893048cc3a841.21437792","name":"Jakob Nolan","email":"[email protected]"}},{"users":{"uid":"589308eb640e79.86708812","name":"Donald Trump","email":"[email protected]"}}] of type org.json.JSONArray cannot be converted to JSONObject 

Habe ich bei der Analyse der JSON-Objekte aus dem JSON-Array etwas falsch gemacht?

Antwort

0

Der JSON, den Sie empfangen, ist ungültig. Zumindest nicht für die gegebene Situation. Sie haben jetzt ein unbenanntes Array mit namens Objekte. Um den Benutzern eine richtige Anordnung zu haben, sollte es so aussehen:

{ 
    "users": [ 
     {  
      "uid":"5893048cc3a841.21437792", 
      "name":"Jakob Nolan", 
      "email":"[email protected]" 
     }, 
     { 
      "uid":"589308eb640e79.86708812", 
      "name":"Donald Trump", 
      "email":"[email protected]" 
     } 
    ] 
} 

Auch die Antwort, die Sie bekommen jetzt eine JSONArray, da es mit [ ] gewickelt ist. In diesem Fall sollten Sie einen JSONArray anstelle eines JSONObject verwenden. Ich möchte JSON in { } wickeln, also kann ich es immer als ein Objekt analysieren, und von dort jedes Array erhalten, wie in diesem Fall "urers".

+0

Irgendwelche Vorschläge für die Lösung? –

+0

Wenn Sie den JSON nicht ändern können, denke ich, dass Sie mit der Antwort von d1vivek681065 das erreichen können, was Sie wollen. Aber die JSON, die Sie empfangen, obwohl Syntax gültig, sieht nicht wie ein normales Array von Benutzern aus. –

+0

@ MarshallS.Lee siehe meine Antwort –

0

Ihre Antwort ist JSONArray, aber Sie analysieren es als JSONObject. Gehen Sie wie folgt vor:

JSONArray responseArray = new JSONArray(strResponse); 
    for(int i =0; i<responseArray.length(); i++){ 
     JSONObject eachObject = responseArray.getJSONObject(i); 
     //do other parsing in each object 
    } 
0
JSONObject jsonObject = new JSONObject(strResponse); 

Ihre Antwort ist nicht JSON-Objekt, es ist JSON-Array. Jedes Element in diesem Array ist ein Objekt namens users

0

Schauen Sie oben in Ihrem logcat, Ihre Antwort gibt JSONArray zurück. Und was Ihr eigentlich zu tun versuchen, ist zu konvertieren, dass JSONArray-JSONObject

JSONObject jsonObject = new JSONObject(strResponse); 

Diese Klassendatei-Code ist.

versuchen diese Veränderung zu

JSONArray jsonArray = new JSONArray(strResponse); 

und weiter kommen JSONObject die von oben Sie dieses JSONArray analysieren kann Wie

for(int i =0; i<jsonArray .length(); i++){ 
    JSONObject jsonObject= jsonArray.getJSONObject(i); 
    JSONArray people = jsonObject.getJSONArray("users"); 
    String name = people.getString("name"); 
    //do other parsing in each string 
} 

und

boolean error = jsonObject.getBoolean("error"); 

entfernen, wenn es keine boolean Geben Sie den Wert in Ihrem JSON ein.

Verwandte Themen