Wie bekomme ich eine Liste aller JSON-Wege, Werte aus einem JSON-String?
Mein Ziel ist zu Lesen, dass ein JSON-Datei und verstehen die Lage der Werte, so dass, wenn ich Begegnung, die gleichen JSON kann ich problemlos Lesen, alle Werte. Ich bin auf der Suche nach einem Weg, um eine Liste mit allen Pfaden zu jedem data-Wert, in Jayway JsonPath format.
JSON-Beispiel:
{
"shopper": {
"Id": "4973860941232342",
"Context": {
"CollapseOrderItems": false,
"IsTest": false
}
},
"SelfIdentifiersData": {
"SelfIdentifierData": [
{
"SelfIdentifierType": {
"SelfIdentifierType": "111"
}
},
{
"SelfIdentifierType": {
"SelfIdentifierType": "2222"
}
}
]
}
}
Idealerweise würde ich gerne nehmen, dass JSON als ein String, und etwas wie das hier tun:
String json = "{'shopper': {'Id': '4973860941232342', 'Context': {'CollapseOrderItems': false, 'IsTest': false } }, 'SelfIdentifiersData': {'SelfIdentifierData': [{'SelfIdentifierType': {'SelfIdentifierType': '111'} }, {'SelfIdentifierType': {'SelfIdentifierType': '2222'} } ] } }";
Configuration conf = Configuration.defaultConfiguration();
List<String> jsonPaths = JsonPath.using(conf).parse(json).read("$");
for (String path : jsonPaths) {
System.out.println(path);
}
Dieser code würde diese ausdrucken, das ist die Lage aller Werte in der JSON:
$.shopper.Id
$.shopper.Context.CollapseOrderItems
$.shopper.Context.IsTest
$.SelfIdentifiersData[0].SelfIdentifierData.SelfIdentifierType.SelfIdentifierType
$.SelfIdentifiersData[1].SelfIdentifierData.SelfIdentifierType.SelfIdentifierType
Dann im Idealfall würde ich in der Lage sein zu nehmen, die Liste und analysieren Sie die gleichen JSON-Objekt zu erhalten, wird jeder Wert vorhanden.
//after list is created
Object document = Configuration.defaultConfiguration().jsonProvider().parse(json);
for (String path : jsonPaths) {
Object value = JsonPath.read(document, path);
//do something
}
Ich bin mir bewusst, dass ich bekommen konnte, dass eine Karte ist eine Repräsentation des JSON-Datei, aber ich bin nicht sicher, dass bietet die gleiche einfache Zugang zum abrufen der Werte. Wenn es eine einfache Möglichkeit zu tun, mit JSONPath, das wäre toll, ansonsten alle anderen Ansätze sind willkommen.
InformationsquelleAutor yak | 2015-10-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich kam mit einer Lösung, die Freigabe im Fall, jemand ist auf der Suche für die gleiche Sache:
InformationsquelleAutor yak
Bitte dieses utility : https://github.com/wnameless/json-flattener
Perfekte Antwort auf Ihre Anforderung. Bietet Abgeflacht Karte und Abgeflacht Saiten für komplexe json-strings.
Ich bin nicht der Autor dieser aber habe es erfolgreich für meinen Anwendungsfall.
InformationsquelleAutor Swapnil Jaju