2017-02-05 2 views
0

Ich habe erfolgreich eine JSON-Datei mit Gson erstellt, aber jetzt, da ich die gleiche Datei analysieren möchte, wird die Codierung alle durcheinander gebracht.Wie dekodiere ich eine JSON-Datei, die mit GSON in Java erstellt wurde?

Dies ist der Code, den ich verwende, um die JSON-Datei zu lesen:

BufferedReader jsonFile = new BufferedReader(new FileReader("file.json")); 
Map<String, List<long[]>> trafficInput = new HashMap<>(); 
trafficInput = gson.fromJson(jsonFile, HashMap.class); 

ich nicht scheinen, um herauszufinden kann, wie die Datei die richtige Art und Weise analysiert wird, um sicherzustellen.

Zum Beispiel dieses gültige JSON-Code aus der Datei:

{"paris":[[1485907200000,182184411,41274],[1485993600000,151646118,36697],"london":[[1485907200000,30200160,155827]} 

... wird wie folgt analysiert:

{"paris":[[1.4859072E12,1.82184411E8,41274.0],[1.4859936E12,1.51646118E8,36697.0],"london":[[1.4859072E12,3.020016E7,155827.0]} 

Diese vermasselt den Rest des Codes auf, als die Long-Positionen aren‘ Es sehnt sich nicht mehr.

Zum Beispiel, wenn ich versuche, einen Wert zu drucken, etwa so:

System.out.println(trafficInput.get("paris").get(0)[0]); 

... ich diesen Fehler:

Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to [J 

Hilfe?

+0

Das könnte nur 'toString' Implementierung von' List/long' sein, haben Sie versucht, durch die Liste zu drucken einzelnen Wert zu drucken? –

+0

Ich habe und es ist ein Fehler. Es besagt, dass die List/longs nicht so lange durchlaufen werden können. Strings funktionieren jedoch auch nicht. – TheBigDoubleA

+0

'System.out.println (trafficInput.get (" paris "). Get (0) [0]));' Was wird gedruckt? –

Antwort

2

Dies ist wegen der folgenden Zeile geschieht:

trafficInput = gson.fromJson(jsonFile, HashMap.class); 

Diese Linie gson instruiert die Zeichenfolge in HashMap ohne jede Art anzugeben und damit deserialisieren, gson wendet seinen Standardkonvertierungsmechanismus (dh Number in double Umwandeln etc). Dies ist der Grund, warum die Sysout Anweisung in einem ClassCastException resultiert, da dieses Element kein array ist.

Alles, was Sie tun müssen, ist eine TypeToken beim Aufruf fromJson Methode anzugeben und es wird auf Typen achten. Beispiel:

Gson gson = new Gson(); 
Type type = new TypeToken<Map<String, List<long[]>>>(){}.getType(); 
Map<String, List<long[]>> trafficInput = new HashMap<>(); 
trafficInput = gson.fromJson("{\"paris\":[[1485907200000,182184411,41274],[1485993600000,151646118,36697]],\"london\":[[1485907200000,30200160,155827]]}", type); 
System.out.println(trafficInput); 
System.out.println(gson.toJson(trafficInput)); 

Das obige Snippet druckt Zahlen ohne wissenschaftliche Notation.

+0

große Antwort, danke – TheBigDoubleA

Verwandte Themen