die überprüfung, ob fehlerhaftes Objekt im json-array
Ich versuche, eine Liste der Objekte in ein array, es funktioniert gut, wenn die Objekte sind alle gut, aber wenn ich 4000 Datensätze, das ist schwer zu sehen, welche fehlerhaft ist. Wie kann ich überprüfen, welcher Teil der Zeichenfolge ist ungültig oder überspringen Sie das bestimmte Objekt.. es wäre besser wenn ich pin Punkt, wo es immer fehlerhaften, aber wie ich schon sagte, mit 4000 Datensätzen der Fehler hilft mir nicht viel. Hier ist mein code:
JsonParser parser = new JsonParser();
JsonReader jreader = new JsonReader(new StringReader(result));
jreader.setLenient(true);
JsonElement elem = parser.parse(reader); //throws malformed json error
JsonArray contacts = elem.getAsJsonArray();
Gson converter = new Gson();
ContactObject obj = null;
Type cons = new TypeToken<ArrayList<Contact>>(){}.getType();
temp = converter.fromJson(contacts, cons);
Hier ist der Fehler:
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 38670
at com.google.gson.internal.Streams.parse(Streams.java:56)
at com.google.gson.JsonParser.parse(JsonParser.java:84)
at com.android.companya.ContactServer$APICalls.doInBackground(APIServer.java:737)
at com.android.companya.ContactServer$APICalls.doInBackground(APIServer.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
Caused by: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 38670
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1310)
at com.google.gson.stream.JsonReader.nextInObject(JsonReader.java:722)
at com.google.gson.stream.JsonReader.peek(JsonReader.java:382)
at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:349)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:657)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:650)
at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:633)
at com.google.gson.internal.Streams.parse(Streams.java:44)
- Warum nicht einfach mit
JSONObject
oderJSONArray
sind Schleife durch Sie selbst?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie einfach
try/catch
konstruieren. Das ist, was es für gemeint.Auch Sie können nicht überspringen Sie ein fehlerhaftes Objekt. Entweder das ganze Ergebnis gültig ist oder nicht. Sie haben, um dieses Update auf Ihrem server, erstellt das Json-string. Es ist wichtig, richtig zu entkommen, die Werte. Also PHP Sie haben
, die Funktionen json_encode(...)
Methode mit Parametern für die Flucht (PHP 5.3 oder neuer) Inhalt es ist.Unterminated object at line 1 column 38670
. Im Grunde das ganze JSON ist eine einzelne Zeile, und der Fehler passiert in der 38671th Charakter. Je nach Fehler es kann auch ein Fehler in der JSON-Bibliothek, die Sie verwenden.google-gson
@code.google.com/p/google-gson Wenn Sie aktualisieren Sie Ihre Frage mit dem JSON-Objekt, das an die Stelle der Ausnahme (siehe Kommentar oben), dann können Menschen Ihnen sagen, ob es eher ein Fehler aus Ihrer Bibliothek, oder wenn der server das erstellen Ungültiger JSON-Ergebnisse.JsonReader jreader = new JsonReader(new StringReader(result));
Derresult
variable enthält den string mit den ganzen JSON. Sie müssen nur, um es auszudrucken (oder zu speichern als Textdatei) und schauen, position, 38670 in den text-editor Ihrer Wahl.Seine für sicher, dass wir erhalten diese Fehlermeldung, wenn json kommt von der server ist ungültig.
Verwendung von try catch wird nicht viel helfen, was ist falsch in Ihrem server-code so, um zu fangen, den genauen Punkt, den Sie brauchen nur zu Folgen folgenden Schritte aus:
1), kopierte ich alle json und validiert in der online json validator tool
Beispiel:
beide tools sind sehr effizient und pin zeigen Sie die genaue Fehlermeldung, wenn Sie server-side-Entwickler selbst dann kann man es einfach anders sagen Ihren Armen Entwickler, um es zu beheben.
hoffe, das ist die ausführliche Antwort.