Analysieren fehlerhafte JSON und in der Lage sein, um zu sehen, wo der Fehler ist
Dies ist nicht etwa, wie zu verwalten oder korrigieren Sie eine fehlerhafte JSON -, es ist darüber, wie erklären Sie dem user, wo der Fehler in der fehlerhaften JSON.
Ist es ein Weg, um herauszufinden, an welcher position in der JSON-parser ist fehlgeschlagen.
Möchte ich dieses problem zu lösen, in einem node.js Anwendung, so halten Sie bitte Ihre Antworten in dieser Domäne, wenn möglich.
Wenn ich die eingebaute JSON-Objekt und die parse-Methode für eine fehlerhafte JSON bekomme ich nur die Ausnahme Nachricht SyntaxError: Unexpected string
. Ich würde gerne herausfinden, wo der Fehler aufgetreten ist.
Bevorzugt wäre ein JSON.validate(json)
, dass das zurückgegebene Ergebnis ok/Fehler-und die Fehler-position. So etwas wie dieses:
var faultyJsonToParse = '{"string":"value", "boolean": true"}';
var result = JSON.validate(faultyJsonToParse);
if (result.ok == true) {
console.log('Good JSON, well done!');
} else {
console.log('The validator found a \'' + result.error + '\' of type \'' + result.errorType + '\' in your JSON near position ' + result.position);
}
Wollte die Ergebnisse der oben genannten wäre:
The validator found a 'SyntaxError' of type 'Unexpected string' in your JSON near position 35.
- Erwarten Sie einen index in einer minified JSON-string, in dem der Fehler aufgetreten?
- Ja, so ähnlich. Es könnte auch ein Weg, um das problem in einer großen JSON-denke ich.
- Yeh.. Vielleicht beim Lesen dieses.. bugzilla.mozilla.org/show_bug.cgi?id=507998 Es wahrscheinlich nicht beantworten Ihre Frage, aber vielleicht geben etwas Einblick in, warum diese Funktionalität nicht vorhanden ist nativ.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen jsonLint:
Ergebnis:
(obwohl jsonLint ist ein Projekt Knoten, es kann auch verwendet werden, im web: einfach nehmen,https://github.com/zaach/jsonlint/blob/master/web/jsonlint.js)
Als @eh9 vorgeschlagen, macht es Sinn, erstellen Sie ein wrapper um die standard-json-parser ermöglichen, detaillierte exception info:
Den integrierten Versionen von
JSON.parse()
nicht konsistentes Verhalten. Es ist konsistent, wenn das argument ist gut-gebildet, und inkonsistent, wenn es nicht. Dies geht zurück auf eine unvollständige Spezifikation dieser Funktion in die ursprüngliche JSON-Bibliothek-Umsetzung. War die Spezifikation unvollständig, weil es nicht definiert eine Schnittstelle für exception-Objekte. Und diese situation führt direkt zu deiner Frage.Während ich kenne keine Lösung, die off-the-shelf in dieser Zeit, die Lösung erfordert das schreiben von JSON-parser und-tracking der position von Informationen für die Fehlerbehandlung. Dieses eingefügt werden kann, die sich nahtlos in Ihren bestehenden code durch (1) die erste Berufung auf die native version, und (2) wenn die native version eine exception wirft, rufen die position-aware version (es wird langsamer) lassen Sie es werfen der Ausnahme, dass Sie Ihren eigenen code standardisiert auf.
Wenn Sie mit NodeJS, Klarinette ist ein sehr schönes event-basierte JSON-parser, die Ihnen helfen, generieren bessere Fehlermeldungen (Zeile und Spalte des Fehlers).
Ich Baue ein kleines Dienstprogramm, mit Klarinette der parser zurückgibt:
Der code ist hier: https://gist.github.com/davidrapin/93eec270153d90581097