Ich erhalte einen String, der entweder den Inhalt von xml oder json enthält.
Wenn String json-Inhalt enthält, verwende ich jackson (java api), um JSON in Java-Objekt
zu konvertierenUnd wenn es XML-Inhalte enthält, benutze ich JAXB, um XML-Inhalt in ein Java-Objekt zu konvertieren ( Unmarshalling ).
Wie kann ich prüfen, ob ich in dieser Zeichenfolge xml oder json erhalte?
Eine XML-Dokument-Entität (im allgemeinen Sprachgebrauch ein XML-Dokument) muss mit "& lt;" beginnen.
Ein JSON-Text beginnt gemäß ECMA-404 mit null oder mehr Leerzeichen, gefolgt von einem der folgenden Zeichen:
%Vor% Ihr einfacher Ansatz besteht also nur darin, if(s.startsWith("<")
Wenn Ihnen die Kodierung dieser Zeichenfolge bekannt ist (oder ASCII oder UTF), dann sollte das erste Zeichen dieses Strings ausreichen.
Wenn der String beginnt
<
haben Sie eine XML-Struktur. {
, [
oder anderen erlaubten Startzeichen Sie haben eine JSON-Struktur. Für JSON müssen Sie auch Leerräume entfernen, bevor Sie das "erste" Zeichen betrachten (wenn die Zeichenfolge, die Sie erhalten, zusätzliche Leerzeichen enthalten kann).
Obwohl es für JSON-Datenstrukturen zulässig ist, mit null
, true
, false
zu beginnen, können Sie diese Situationen vermeiden, wenn Sie bereits etwas über Ihre Datenstrukturen wissen.
Sie können also im Grunde prüfen, ob das erste Zeichen ein <
ist und in diesem Fall es als XML behandeln. In anderen Fällen behandeln Sie es als JSON und lassen Sie jackson einige Ausnahmen auslösen, wenn dies keine legale JSON-Syntax ist.