Android JSon-Fehler "Erwartete BEGIN_OBJECT aber war BEGIN_ARRAY an Zeile 1 Spalte 2"

Ich bekomme JSon-Daten aus einem Web-Service, die Beispieldaten sind unten angegeben:

[ { "SectionId": 1, "SectionName": "Android" } ] 

Wenn ich versuche, es zu konvertieren, wirft es einen Fehler, ich tue es als:

  • PopUp-Dialog Android aus Hintergrund-Thread
  • Speichern von Hex-Farbwerten in strings.xml
  • HonyComb und DefaultHttpClient
  • Android-Handler-Nachricht und ListView
  • Android getLine1Number () gibt leere Zeichenfolge zurück
  • Bedingung wird nicht ausgelöst, wenn ein 75: android
  •  Data data = new Gson().fromJson(jsonDataFromWebService, Data.class); 

    Meine Sektionsklasse ist:

     class Section { public int SectionId; public String SectionName; } class Data { public List<Section> sections; } 

    Der LogCat sagt:

    Com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Erwartete BEGIN_OBJECT aber war BEGIN_ARRAY an Zeile 1 Spalte 2

  • Android MediaPlayer - wie man im STREAM_ALARM spielt?
  • Android Softkeyboard taucht niemals im Emulator auf
  • File.createTempFile () VS neue Datei ()
  • Wie kann ich die Funktionalität des Scrolling auf linearem Layout in Android aktivieren?
  • So ändern Sie die Textauswahl Symbolleiste Farbe, die kommt, wenn wir einen Text kopieren?
  • Kann in der Projektstruktur keine Importmoduloption finden (Android Studio 0.3.4 - 0.5.2)
  • 3 Solutions collect form web for “Android JSon-Fehler "Erwartete BEGIN_OBJECT aber war BEGIN_ARRAY an Zeile 1 Spalte 2"”

    Der Fehler erklärt, was falsch ist … ur Rückgabe eines Arrays und kein JSon-Objekt

    Versuche wie folgt:

     JSONArray ja = new JSONArray(jsonStringReturnedByService); Data sections = new Data(); for (int i = 0; i < ja.length(); i++) { Section s = new Section(); JSONObject jsonSection = ja.getJSONObject(i); s.SectionId = Integer.ValueOf(jsonSection.getString("SectionId")); s.SectionName = jsonSection.getString("SectionName"); //add it to sections list sections.add(s); } return sections; 

    Sie versuchen, ein Nicht-Array-Objekt (Collection) aus einem JSONArray zu erstellen. Der Fehler ist ziemlich klar: GSON erwartete den Anfang eines Objekts, fand aber den Anfang eines Arrays statt.

    Schauen Sie sich die Dokumentationsseite an, um zu sehen, wie Sie mit Array- und Collection-Typen mit GSON arbeiten können

    https://sites.google.com/site/gson/gson-user-guide#TOC-Collections-Examples

    Aus den docs:

    Array Beispiele

    Gson gson = neue Gson (); Int [] ints = {1, 2, 3, 4, 5}; String [] Strings = {"abc", "def", "ghi"};

    (Serialisierung) gson.toJson (ints); ==> druckt [1,2,3,4,5] gson.toJson (Saiten); ==> druckt ["abc", "def", "ghi"]

    (Deserialisierung) int [] ints2 = gson.fromJson ("[1,2,3,4,5]", int [] Klasse); ==> ints2 ist gleich wie ints

    Wir unterstützen auch mehrdimensionale Arrays mit beliebig komplexen Elementtypen Sammlungsbeispiele

    Gson gson = neue Gson (); Sammlung ints = Lists.immutableList (1,2,3,4,5);

    (Serialisierung) String json = gson.toJson (ints); ==> json ist [1,2,3,4,5]

    (Deserialisierung) Typ collectionType = new TypeToken> () {}. GetType (); Sammlung ints2 = gson.fromJson (json, collectionType); Ints2 ist gleich wie ints

    Ziemlich schrecklich: Notiz, wie wir die Art der Sammlung definieren Leider gibt es hier keine Möglichkeit, dies in Java zu umgehen

    Sammlungen Einschränkungen

    Kann die Sammlung von willkürlichen Objekten serialisieren, kann aber nicht davon abwarten, denn es gibt keine Möglichkeit für den Benutzer, den Typ des resultierenden Objekts anzuzeigen Während des Desialialisierens muss die Sammlung von einem bestimmten generischen Typ sein. Das alles macht Sinn und ist selten ein Problem W> Henne nach guten Java-Coding-Praktiken

    Verwenden Sie die Sektionsklasse nur wie folgt:

     Section[] sectionArray = new Gson().fromJson(jsonDataFromWebService, Section[].class); for (Section section: sectionArray) { Log.e("Debug", section.toString()); } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.