2016-11-25 3 views
-2

Unten ist Teil meines Java-CodeJson und Java-Konvertierung

Type relMapType = new TypeToken<Map<String, Map<String, Map<String ,Map<String, List<Set<ProfileData>>>>>>>(){}.getType(); 
    InputStream is = new FileInputStream("D:\\work.json"); 
    String jsonTxt; 
    try { 
     jsonTxt = IOUtils.toString(is); 
     System.out.println(jsonTxt); 
     JSONObject jsons = new JSONObject(jsonTxt); 
     String jString= gson.toJson(jsons); 
      gson.fromJson(jString, relMapType); 
     } catch (IOException e) { 
     e.printStackTrace(); 
    } 

Im Folgenden meine JSON-Daten in "work.json" Datei sind

{ 
    "string1":{ 
     "string2":{ 
     "string3":{ 
      "string4":[ 
       { 
        "primaryKey":{ 
        "projectCode":"PC", 
        "type":"type1", 
        "code1":"data1", 
        "code2":"data2" 
        }, 
        "status":"status1", 
        "Id":"123", 
        "frequency":"freq", 
        "destFre":"destFreq" 
       } 
      ] 
     } 
     } 
    } 
} 

, wenn ich den Code immer unter Ausnahme ausgeführt werden. Kann mir jemand helfen?

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 5 column 21 
at com.google.gson.Gson.fromJson(Gson.java:806) 
at com.google.gson.Gson.fromJson(Gson.java:761) 
at com.google.gson.Gson.fromJson(Gson.java:710) 
at com.JsonExample.main(JsonExample.java:97) 

Verursacht durch: java.lang.IllegalStateException: Erwartete BEGIN_ARRAY aber war BEGIN_OBJECT in Zeile 5 Spalte 21

+0

Ich vermute, dass 'Liste >' ist nicht richtig –

+0

Konstruieren Sie ein solches Objekt programmatisch und dann 'gson.toGson'. Sie werden sehen, wie der JSON wie – xenteros

+0

@ Xenteros aussehen sollte. Warum Sie diese Frage abstimmen ?? –

Antwort

2

Sie verwenden einen Set innerhalb eines List in List<Set<ProfileData>>. Beide sind Collection s und werden daher als Arrays behandelt. Der gleiche Teil Ihres JSON ist ein Array von Objekten. Entfernen Sie Set oder List und es sollte funktionieren.

+0

danke für die Vorschläge. es hat gut funktioniert. –

+0

Können Sie das Problem hier bitte erklären. Ich habe nicht den richtigen Punkt, was du gesagt hast. –

+0

Da 'Set' und' List' beide 'Collection' sind, erwartet der Decoder' 'string4 ': [[{...}]]' 'und Ihr JSON enthalten' "string4": [{...} ] '. – Thiefster