Wie überprüfe ich eine JSON-Zeichenfolge in Java? Oder könnte ich es mit regulären Ausdrücken analysieren?
java
json
validation
Sappu
quelle
quelle
Antworten:
Eine wilde Idee, versuchen Sie es zu analysieren und fangen Sie die Ausnahme:
Dieser Code verwendet die JSON-API-Implementierung von org.json , die auf github , in maven und teilweise auf Android verfügbar ist .
quelle
JACKSON Bibliothek
Eine Möglichkeit wäre die Verwendung der Jackson-Bibliothek . Importieren Sie zuerst die neueste Version (jetzt ist):
Anschließend können Sie die richtige Antwort wie folgt implementieren :
Google GSON-Option
Eine andere Option ist zu verwenden Google Gson . Importieren Sie die Abhängigkeit:
Auch hier können Sie die vorgeschlagene Lösung wie folgt implementieren:
Hier folgt ein einfacher Test:
Bitte beachten Sie, dass aufgrund von Kommas, die in der Version behoben werden, ein "geringfügiges" Problem auftreten kann
3.0.0
.quelle
new ObjectMapper().readTree("28xjRBuOQqupRopHeSuhRQ")
JACKSON-Falle : Analysiert ohne Ausnahme als IntNode (28). Nicht wirklich erwartet ...Mit Google Gson können Sie JsonParser verwenden:
quelle
Sie können die in der JSONUtils- Bibliothek verfügbare .mayBeJSON (String str) verwenden.
quelle
Dies hängt davon ab, was Sie mit Ihrer Validierung beweisen möchten. Das Parsen des JSON, wie andere vorgeschlagen haben, ist sicherlich besser als die Verwendung von Regexen, da die Grammatik von Json komplizierter ist, als dies nur mit Regexen dargestellt werden kann.
Wenn der JSON immer nur von Ihrem Java-Code analysiert wird, verwenden Sie denselben Parser, um ihn zu validieren.
Nur das Parsen sagt Ihnen jedoch nicht unbedingt, ob es in anderen Umgebungen akzeptiert wird. z.B
Wenn Ihre Validierung sehr gründlich sein muss, können Sie:
quelle
Bitte laden Sie die Bibliothek stringtree-json herunter
quelle
Ein bisschen über das Parsen:
Json und tatsächlich alle Sprachen verwenden eine Grammatik der es sich um eine Reihe von Regeln handelt, die als Substitutionen verwendet werden können. Um json zu analysieren, müssen Sie diese Substitutionen grundsätzlich umgekehrt berechnen
Json ist eine kontextfreie Grammatik , dh Sie können unendlich verschachtelte Objekte / Arrays haben und der Json wäre weiterhin gültig. Regex behandelt nur reguläre Grammatiken (daher das 'reg' im Namen), eine Teilmenge kontextfreier Grammatiken, die keine unendliche Verschachtelung zulassen. Daher ist es unmöglich, nur Regex zum Parsen aller gültigen JSON zu verwenden. Sie könnten einen komplizierten Satz von Regexs und Schleifen verwenden, mit der Annahme, dass niemand vorbei nisten wird, sagen wir 100 Level tief, aber es wäre immer noch sehr schwierig.
Wenn Sie bereit sind, Ihren eigenen Parser zu schreiben, können
Sie nach dem Ausarbeiten der Grammatik einen rekursiven Abstiegsparser erstellen
quelle
Überprüfen Sie, ob eine bestimmte Zeichenfolge in Kotlin als JSON gültig ist . Ich habe die Antwort von MByD Java in Kotlin konvertiert
quelle
Hier finden Sie ein Tool , mit dem eine JSON-Datei validiert werden kann, oder Sie können Ihre JSON-Datei einfach mit einer beliebigen JSON-Bibliothek deserialisieren. Wenn der Vorgang erfolgreich ist, sollte sie gültig sein ( z. B. google-json , das bei der Eingabe eine Ausnahme auslöst es ist parsing ist nicht gültig JSON).
quelle
Mit Playframework 2.6 kann die in der Java-API enthaltene Json-Bibliothek auch zum einfachen Parsen der Zeichenfolge verwendet werden. Die Zeichenfolge kann entweder ein JSON-Element des JSON-Arrays sein. Da der zurückgegebene Wert hier nicht von Bedeutung ist, wird nur der Analysefehler abgefangen, um festzustellen, ob die Zeichenfolge eine korrekte JSON-Zeichenfolge ist oder nicht.
quelle
IMHO ist die eleganteste Methode die Verwendung der Java-API für die JSON-Verarbeitung (JSON-P), einem der JavaEE-Standards, die dem JSR 374 entsprechen .
Fügen Sie mit Maven die Abhängigkeit von JSON-P hinzu:
Besuchen Sie die offizielle JSON-P-Seite für weitere Informationen.
quelle
Hier ist ein funktionierendes Beispiel für die strikte Analyse von JSON mit der Gson- Bibliothek:
Siehe auch meine andere ausführliche Antwort unter So überprüfen Sie, ob JSON in Java mit GSON gültig ist, mit weiteren Informationen und einem erweiterten Testfall mit verschiedenen ungültigen Beispielen.
quelle
Wie Sie sehen können, gibt es viele Lösungen. Sie analysieren hauptsächlich den JSON, um ihn zu überprüfen, und am Ende müssen Sie ihn analysieren, um sicherzugehen.
Je nach Kontext können Sie die Leistung jedoch durch eine Vorabprüfung verbessern.
Wenn ich APIs aufrufe, überprüfe ich nur, ob das erste Zeichen '{' und das letzte '}' ist. Wenn dies nicht der Fall ist, erstelle ich keinen Parser.
quelle
Ich habe eine sehr einfache Lösung dafür gefunden.
Bitte installieren Sie zuerst diese Bibliothek
net.sf.json-lib
dafür.Getan. Genießen
quelle
Die Antworten sind teilweise richtig. Ich hatte auch das gleiche Problem. Das Parsen des JSON und das Überprüfen auf Ausnahmen scheint die übliche Methode zu sein, aber die Lösung schlägt für den Eingabe-JSON so etwas wie fehl
{"outputValueSchemaFormat": "", "sortByIndexInRecord": 0, "sortOrder": 847874874387209 "descending"} kajhfsadkjh
Wie Sie sehen können, ist der JSON ungültig, da nachgestellte Garbage-Zeichen vorhanden sind. Wenn Sie jedoch versuchen, den obigen JSON mit Jackson oder GSON zu analysieren, wird die analysierte Karte des gültigen JSON angezeigt, und die nachgestellten Garbage-Zeichen werden ignoriert. Dies ist nicht die erforderliche Lösung, wenn Sie den Parser zur Überprüfung der JSON-Gültigkeit verwenden.
Eine Lösung für dieses Problem finden Sie hier .
PS: Diese Frage wurde von mir gestellt und beantwortet.
quelle
und rufen Sie dann diese Funktion auf, die Ihren JSON-String übergibt :)
quelle
Die obige Lösung deckt beide Szenarien ab:
quelle
Eine Lösung mit der
javax.json
Bibliothek:quelle
Sie können eine
WellFormedJson
Klasse aus der deklarativen Validol- Validierungsbibliothek verwenden.Die Erklärung selbst könnte wie folgt aussehen:
Die Prüfphase sieht folgendermaßen aus:
Es mag wie ein Overkill für eine so einfache Aufgabe erscheinen, aber es leuchtet, wenn Sie eine komplexe Anfrage validieren müssen. Schauen Sie sich den Schnellstartabschnitt von validol an .
quelle