2017-06-19 2 views
-1

Bearbeiten Ich habe die Detailklasse hinzugefügt und den doppelten Schlüssel behoben. Die Daten sind tatsächlich Zeichenfolgen.JSON-Datei analysiert, aber ich erhalte immer noch die Ausnahme: Erwartete BEGIN_OBJECT, aber war STRING

Verwenden von Gson 2.8 und Eclipse.

Ich habe es geschafft, die JSON-Datei analysiert und die Werte gespeichert und gedruckt, , aber ich bekomme immer noch die Ausnahme. (BEGIN_OBJECT erwartet, aber war STRING in Zeile 1 Spalte 2)

ich andere Lösungen geprüft habe, mag ein Objekt setzen, wo erwartet, aber es wirft nur eine andere Ausnahme. z (begin_array wird erwartet)

Json Datei

[{"numValue1":"1", 
"StringValue1":"EI", 
"StringValue2":"A", 
"enumValue1":"TYPE_A", 
"numValue2":"3221", 
"StringValue3":"DDEF", 
"StringValue4":"Mexicof", 
"numValue3":"8", 
"stringDate1":"27/05/2017 11:55", 
"stringDate2":"29/09/2016 11:55", 
"stringDate3":"27/05/2017 11:57"}] 

-Code zum Parsen der Datei verwendet

Gson gson = new GsonBuilder().setDateFormat("dd/MM/yyyy HH:mm").create(); 
Details[] feedRecord = gson.fromJson(data.trim(), Details[].class); 

Details der Klasse

public class Details implements Serializable { 

enum Type { 
    TYPE_D, TYPE_A 
}; 

@SerializedName("numValue1") 
private Integer num1; 
@SerializedName("StringValue1") 
private String string1; 
@SerializedName("StringValue2") 
private String string2; 
@SerializedName("numValue2") 
private String num2; 
@SerializedName("StringValue3") 
private String string3; 
@SerializedName("StringValue4") 
private String string3; 
@SerializedName("numValue3") 
private String num3; 
@SerializedName("StringDate1") 
private String date1; 
@SerializedName("StringDate2") 
private String date2; 
@SerializedName("StringDate3") 
private String date3; 
@SerializedName("enumType1") 
private Type enumType; 
} 

Exception

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $[0] 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224) 
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41) 
    at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:72) 
    at com.google.gson.Gson.fromJson(Gson.java:887) 
    at com.google.gson.Gson.fromJson(Gson.java:852) 
    at com.google.gson.Gson.fromJson(Gson.java:801) 
    at com.google.gson.Gson.fromJson(Gson.java:773) 
+1

Wie sicher sind Sie, dass beginnt die JSON Sie hier gezeigt habe, ist * genau * der Inhalt von 'data'? –

+3

Nun, Sie haben einen doppelten Schlüssel, ich weiß nicht, ob dies dazu führt, dass Gson fehlschlägt ... – hfhc2

+2

Mögliches Duplikat von ["Expected BEGIN \ _OBJECT aber war STRING in Zeile 1 Spalte 1"] (https: // stackoverflow .com/questions/28418662/expected-begin-object-aber-was-string-at-line-1-column-1) – bhspencer

Antwort

0

Mit JsonParser, ist die Ausnahme: (I den doppelten Schlüssel geändert)

Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 252 path $ 
    at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1559) ~[gson-2.8.0.jar:na] 

Die Zustände Gson api, dass das Datum Muster

http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html?is-external=true

folgen

Dies hat keine Ausnahme:

String str = "[{\"numValue1\":\"1\",\"StringValue1\":\"EI\",\"StringValue2\":\"A\",\"enumValue1\":\"TYPE_A\",\"numValue11\":\"3221\",\"StringValue4\":\"DDEF\",\"StringValue5\":\"Mexicof\",\"numValue2\":\"8\",\"stringDate1\":\"27/05/2017 11:55\",\"Date2\":\"29/09/2016 11:55\",\"Date3\":\"27/05/2017 11:57\"}]\""; 
Gson gson = new GsonBuilder().setDateFormat("MM/dd/yyyy HH:mm").create(); 
JsonReader jr = gson.newJsonReader(new StringReader(str)); 


jr.beginArray(); 
jr.beginObject(); 
System.out.println(jr.nextName()); 

Spalte 252 ist in dem Datumsdaten

Verwandte Themen