Einzelne Feld von JSON mit Jackson
Gegeben ein beliebiger JSON, hätte ich gerne den Wert von einem einzigen Feld contentType
. Wie es mit Jackson?
{
contentType: "foo",
fooField1: ...
}
{
contentType: "bar",
barArray: [...]
}
Verwandte
- So finden angegebenen Namen und Wert in JSON-string aus Java? (GSON)
- Mit gson zu Deserialisieren bestimmte JSON-Feld eines Objekts (GSON)
- Hier stackoverflow.com/a/35722718/715269 ist die Art und Weise, wie nur zu Lesen brauchte Feld im JSON-Format ohne Abbildung als ganzes.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Jackson Weg
Wenn man bedenkt, dass Sie don ' T haben ein POJO-Beschreibung der Daten Struktur, können Sie einfach tun:
Fragen in den Kommentaren Abschnitt
Wenn Sie jedoch wollen, nicht verbrauchen die gesamte Quelle
String
, sondern einfach nur Zugriff auf eine bestimmte Eigenschaft, deren Weg Sie wissen, Sie müssen es selbst schreiben, wobei Tokeniser.Tatsächlich, es ist Wochenende und ich habe Zeit auf meinen Händen, so konnte ich Ihnen einen Vorsprung: hier ist ein basic-one! Es kann im
strict
- Modus und ausspeien vernünftige Fehlermeldungen, oder nachsichtig und zurückOptional.empty
wenn die Anforderung konnte nicht erfüllt werden.Vorausgesetzt, die folgende JSON-Inhalt:
... Sie könnte meine
JSONPath
- Klasse wie folgt:Beachten Sie, dass es basic. Es muss nicht zwingen-Datentypen (jeder Wert, den es gibt, ist eine
String
) und gibt nur Blattknoten.Eigentliche Testfall
Verarbeitet
InputStream
s, so können Sie es testen, gegen einige Riesen-JSON-Dokument, und sehen, dass es viel schneller als es dauern würde, Ihren browser zu laden und deren Inhalte anzuzeigen:Schnelltest
Hinweis: ich bin nicht re-verwenden Sie einen bereits vorhandenen
JSONPath
oderObjectMapper
so dass die Ergebnisse ungenau sind -- dies ist nur ein sehr grober Vergleich sowieso:Jackson
, die die Bibliothek gebeten, für die Frage. Es erklärt auch nicht den Unterschied, den Sie scheinen, zu finden!JSONObject
Klasse und ich garantiere dir, dass der code in der vorgestellten andere Antwort hat in der Tat die Karte der gesamtenString
(nicht anders als meine Antwort). Sind Sie falsch. Zumindest, wenn verwendet, mit dem JSONObject(String) - Konstruktor aufgerufen, gefolgt von JSONObject#getString, die speichert alle analysierten Eigenschaften in einer Karte und wird einfach von dort.ObjectNode
wieder durch eine einfacheLinkedHashMap
! Das ist es NUR Feld und es wird NICHT kommentiert! Es gibt keine Unterschied 🙂mapper.readValue(jp, Foo.class)
, woFoo
ist ein POJO, das kommentiert... ich konnte nicht scheinen zu finden, eine ausgewachsene Lösung, die tatsächlich können Sie den Zugriff auf einen bestimmten Bereich, ohne zuerst analysieren Sie den gesamten Inhalt... also schrieb ich einen. Ich dachte, Sie könnten interessiert sein! Cheers.Wenn Sie in der JSON-Gläser in Ihrer Anwendung den folgenden code-snippet ist nützlich:
und wenn Sie mit Gson Gläser dann den gleichen code sieht wie folgt aus:
Wollen einfach nur, um Updates für 2019. Fand ich die einfachste impl:
Ich würde vorschlagen, zu verwenden
path
stattget
alsget
wirft eine NPE, wo der Pfad zurück mit einem Standard 0 oder "", die ist sicherer, mit zu arbeiten, wenn Sie die Analyse richtig, zum 1. mal.Meine $0,02
Andere Möglichkeit ist:
mein Problem ist ein bisschen kompliziert.. für unter der Objekt-ich brauche JSON-String ..
Unten ist meine Klasse, in der gibt es einige String und einem JSON-Objekt, das wir brauchen, um zu beharren in der DB in einer einzigen Tabelle ..
Bin ich mit einem Object-mapper zu konvertieren, das Objekt, aber es gibt mir ein Json-innen Json.. das ist falsch.. ich konvertieren müssen innerhalb JSON-Objekt zu einem String mit unten mapper
ungültiges JSON:
korrekte JSON ist