JSON String zum Java-Objekt mit GSON

8

Ich versuche, json zu Java zu parsen.

Ich habe die folgende Zeichenfolge, die json gemäß jsonlint.com

gültig ist %Vor%

Ich versuche, es in ein Objekt zu analysieren und erhalte den folgenden Fehler. "Erwartete BEGIN_OBJECT, aber war BEGIN_ARRAY in Zeile 1 Spalte 2"

%Vor%

BoxSearch besteht daraus.

%Vor%

Boxen ist ein Latitude-Objekt und ein Longitude-Objekt, die beide identisch definiert sind.

%Vor%

Ich kann die Attribute der höheren Ebene (lat1, lat2, long1 und long2) in ein einfacheres BoxSearch-Objekt analysieren, das nur diese vier Attribute hat. Das Problem tritt auf, wenn der JSON und das Objekt komplexer sind. Ist es überhaupt möglich zu tun, was ich versuche?

Ich hoffe, ich habe genug Informationen zur Verfügung gestellt, um Hilfe zu bekommen. Ich würde glücklich sein, mehr Informationen oder sogar ein Testprojekt bei Bedarf zur Verfügung zu stellen. Ich betreibe dies als ein Junit-Test.

Danke.

    
user2415153 23.05.2013, 20:19
quelle

2 Antworten

16

Der Grund für den Fehler ist, dass Ihr JSON auf der obersten Ebene ein Array und kein Objekt ist. Das wird durch GSON geworfen "Erwartete BEGIN_OBJECT aber war BEGIN_ARRAY"? .

Allerdings wird die Lösung dort für Ihr JSON nicht funktionieren, da Sie ein Array gemischter Typen (ein Objekt und ein Array) anstelle eines Arrays eines einzelnen Objekttyps haben. Dazu müssen Sie einen benutzerdefinierten Deserializer schreiben (siehe Der Abschnitt des Gson-Benutzerhandbuchs, der dies abdeckt ) oder Gson's verwendet JsonParser klasse direkt und extrahiere die Daten aus dem Syntaxbaum.

Bearbeiten von Kommentaren oben:

Wenn Sie derjenige sind, der den JSON erstellt, sieht so aus, wie Sie wollen, ist ein Array von BoxSearch -Objekten?

Basierend auf Ihrer Klasse Java BoxSearch benötigen Sie JSON wie folgt strukturiert:

%Vor%

Die Art und Weise, wie Sie Boxes class definiert haben, wird jedoch nicht funktionieren. (Wolltest du eine Reihe von ihnen haben?). So wie es aussehen müsste:

%Vor%

Jetzt haben Sie ein Array mit einem Objekttyp ( BoxSearch ), mit dem Sie deserialisieren können:

%Vor%

Wenn Sie wirklich kein Array von diesen benötigen, entfernen Sie das äußere Array und tun Sie einfach:

%Vor%     
Brian Roach 23.05.2013, 20:31
quelle
16
%Vor%

sehr einfach.

    
王怡飞 18.12.2015 06:57
quelle

Tags und Links