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.

mit jedem json Parsen und ein wenig Rekursion scheint es nicht sehr Komplex

InformationsquelleAutor yak | 2015-10-19

Schreibe einen Kommentar