JSONPath-Ausdruck, der einen Wert aus einem array auf Zustand oder nur der erste Wert
Gegeben JSON wie folgt aufgebaut:
{
"name":"Some Guy",
"emails":[
{
"description":"primary",
"status":"UNVERIFIED",
"email":"[email protected]"
},
{
"description":"home",
"status":"VERIFIED",
"email":"[email protected]"
},
{
"description":"away",
"status":"VERIFIED",
"email":"[email protected]"
}
]
}
Ich würde gerne eine JSONPath Ausdruck, um die ersten E-Mail mit dem status VERIFIED
und wenn keine vorhanden sind, dann bekommen nur die erste E-Mail in das array. So, angesichts der oben genannten Beispiel wäre das Ergebnis [email protected]
. Angesichts dieses Beispiel:
{
"name":"Some Guy",
"emails":[
{
"description":"primary",
"status":"UNVERIFIED",
"email":"[email protected]"
},
{
"description":"home",
"status":"UNVERIFIED",
"email":"[email protected]"
}
]
}
wäre das Ergebnis [email protected]
.
Ist das möglich mit einem JSONPath Ausdruck?
Die JSONPath Implementierung verwenden Sie? Tun Sie müssen dies tun, in einem Ausdruck?
Heute bin ich mit dem jayway Java-Implementierung, aber wenn Sie andere Implementierungen, die funktionieren würde, könnte ich herausfinden, wie zu integrieren, die Umsetzung. Ich hatte im Sinn, es zu tun in einem einzigen Ausdruck ja, aber wenn Sie hatte eine Weg, wo es sein könnte, ausgedrückt als eine Kette von Ausdrücken, ich würde offen sein, wenn man bedenkt, dass. Es kann einfach nicht verlangen, meine eigene Java-oder Javascript-code zu verarbeiten Zwischenergebnisse.
Heute bin ich mit dem jayway Java-Implementierung, aber wenn Sie andere Implementierungen, die funktionieren würde, könnte ich herausfinden, wie zu integrieren, die Umsetzung. Ich hatte im Sinn, es zu tun in einem einzigen Ausdruck ja, aber wenn Sie hatte eine Weg, wo es sein könnte, ausgedrückt als eine Kette von Ausdrücken, ich würde offen sein, wenn man bedenkt, dass. Es kann einfach nicht verlangen, meine eigene Java-oder Javascript-code zu verarbeiten Zwischenergebnisse.
InformationsquelleAutor jhericks | 2017-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du effektiv nur 2 JSONPath Ausdrücken, in denen die zweite (die erste E-Mail) sollten nur dann ausgewertet, wenn die erste (erste verifizierte E-Mail) gibt nichts zurück, also ich glaube nicht, dass du beurteilen kannst, Sie beide zur gleichen Zeit, in einem einzigen Ausdruck.
Können Sie anwenden, um Ihnen eine nach der anderen, obwohl:
Wenn die E-Mail-array leer ist,
ctx.read("$.emails[0].email")
null zurück, anstatt eine Ausnahme zu werfen, Dank der optionSUPPRESS_EXCEPTIONS
.Wenn Sie nicht wissen, die Anzahl der Pfade im Voraus:
Den option
ALWAYS_RETURN_LIST
bedeutet, dass der Rückgabetyp ist eine Liste, selbst wenn Sie die eine oder keine Ergebnisse.getEmail
Methode ist nicht zur Arbeit zu gehen für mich.Die Methode ist mehr für die Demo. Sie können sich bewerben, diese 2 Ausdrücke, die eines nach dem anderen, so dass Sie drehen können, sowohl von der hard-codierte Ausdrücke in meinem Beispiel in Argumente.
Sagen, ich hatte ein array von Ausdrücke:
["$.emails[?(@.status == 'VERIFIED')].email", "$.emails[0].email"]
Was wäre eine Methode Aussehen, die würde einfach nur Durchlaufen diese Ausdrücke und geben Sie die richtige E-Mail?verwenden Sie
ALWAYS_RETURN_LIST
um sicherzustellen, dass alle liest zurückgeben einer Liste geben, dann eine Schleife durch die Pfade. Antwort aktualisiert.Noch nicht ganz, es für mich tun, denn wir haben Sie zu unterstützen Dinge wie die einfache JSONPath:
$.emails
in dem Fall wäre, würden Sie wollen an die Liste zurückgegeben, aber das gibt mir genug zu gehen. Dies ist nicht die Antwort die ich mir erhofft hatte, aber wenn niemand kommt mit etwas überlegen in den nächsten Tagen, ich akzeptiere Ihre Antwort und die Vergabe der Prämie.InformationsquelleAutor approxiblue
Dieser code sollte funktionieren perfekt für Sie
Es soll tun. Alle Parameter des ersten Datensatzes erfasst werden. Print "Verzeichnis", um die Konsole zu überprüfen
Ein weiteres problem hier ist, dass man nicht davon ausgehen, die Reihenfolge der Einträge. Ein JSon-array ähnelt einer JSon ungeordnete Liste.
Ich meine nicht, dass 'status' würde nicht enthalten sein. Ich meine, es würde immer nur die erste E-Mail-ohne Rücksicht darauf, ob der status == 'VERIFIZIERT' ist oder nicht. Wäre es ein anderes Ergebnis für die zwei JSON-Beispiele?
InformationsquelleAutor