2016-04-24 7 views
1

Ich habe eine gültige JSON-Datei. Ich möchte es in einen Speicher als JSONArray Objekt lesen.JSON-Dateiverarbeitungsfehler: Ein JSONArray-Text muss mit '[' bei 1 [Zeichen 2 Zeile 1] beginnen, wenn Datei in UTF-8-Codierung verwendet wird

Um das zu tun, dass ich den folgenden Code verwenden (angetrieben durch Apache Commons IO 2.5):

String jsonTxt = FileUtils.readFileToString(new File(file.json), "UTF-8"); 
JSONArray itemsArr = new JSONArray(jsonTxt); 

Aber ich bekomme die Fehlermeldung:

Exception in thread "main" org.json.JSONException: A JSONArray text must start with '[' at 1 [character 2 line 1] 
    at org.json.JSONTokener.syntaxError(JSONTokener.java:433) 
    at org.json.JSONArray.<init>(JSONArray.java:106) 
    at org.json.JSONArray.<init>(JSONArray.java:145) 
    at il.ac.haifa.is.infomedia.dba.NewsSourcesData.loadNewsSourcesData(NewsSourcesData.java:39) 
    at il.ac.haifa.is.infomedia.main.Main.main(Main.java:65) 

Nach mehreren Überprüfungen, fand ich heraus, dass die Wurzel des Problems ist die Dateicodierung. Wenn ich eine Datei in UTF-8 gebe, löst es eine Ausnahme aus, aber wenn ich die Datei in ANSI umwandle, funktioniert alles korrekt.

Ich verwende org.json Version json-20160212.jar.

Meine Frage:

  • Wie kann ich JSONArray aus meiner JSON-Datei in UTF-8 Codierung erhalten?
+0

wenn Sie sich 'jsonTxt' ist es gültig JSON? – Yazan

+0

@Yazan, yes.At mindestens 'IDEA 2016.1' und' jsonlint.com' behaupten dies. –

+0

das ist seltsam! eine andere Anmerkung ist "Zeichen 2 Zeile 1" also was ist das 1. Zeichen? ist es eine Art von ungültigem Zeichen (unsichtbar vielleicht?), und eine andere Frage, durch "wenn ich die Datei in ASCII umwandle" meinst du die Dateikodierung umwandeln (speichern unter) oder einfach einen anderen Kodierungsnamen in deinem 'readFileToString()' verwenden ? – Yazan

Antwort

2

Ich glaube, Sie haben eine Datei kodieren in UTF-8 with BOM try-Datei mit dem Editor zu konvertieren ++ oder etwas ähnlich zu UTF-8 ohne BOM