Cette section fournit des d¨¦tails sur la fonctionnalit¨¦ JSONPath prise en charge dans les ¨¦tapes de pr¨¦traitement de la valeur de l'¨¦l¨¦ment.
JSONPath se compose de segments s¨¦par¨¦s par des points. Un segment peut ¨ºtre soit un mot simple comme un nom de valeur JSON, *
ou une construction plus complexe entre crochets [
]
. Le point de s¨¦paration avant le segment entre crochets est facultatif et peut ¨ºtre omis. Par exemple:
Chemin | Description |
---|---|
$.object.name |
Renvoie le contenu de object.name. |
$.object['name'] |
Renvoie le contenu de object.name. |
$.object.['name'] |
Renvoie le contenu de object.name. |
$["object"]['name'] |
Renvoie le contenu de object.name. |
$.['object'].["name"] |
Renvoie le contenu de object.name. |
$.object.history.length() |
Renvoie le nombre d'¨¦l¨¦ments du tableau object.history. |
$[?(@.name == 'Object')].price.first() |
Renvoie le champ price du premier objet avec le nom 'Object'. |
$[?(@.name == 'Object')].history.first().length() |
Renvoie le nombre d'¨¦l¨¦ments du tableau history du premier objet avec le nom 'Object'. |
$[?(@.price > 10)].length() |
Renvoie le nombre d'objets dont le prix est sup¨¦rieur ¨¤ 10. |
Voir aussi : Echapper les caract¨¨res sp¨¦ciaux des valeurs de macro LLD dans JSONPath.
Segment | Description |
---|---|
<nom> |
Faire correspondre la propri¨¦t¨¦ de l'objet par son nom. |
* |
Faire correspondre toutes les propri¨¦t¨¦s de l'objet. |
['<nom>'] |
Faites correspondre la propri¨¦t¨¦ de l'objet par son nom. |
['<nom>', '<nom>', ...] |
Faites correspondre la propri¨¦t¨¦ d'objet par l'un des noms r¨¦pertori¨¦s. |
[<index>] |
Faites correspondre l'¨¦l¨¦ment du tableau par l'index. |
[<nombre>, <nombre>, ...] |
Faire correspondre l'¨¦l¨¦ment de tableau par l'un des index r¨¦pertori¨¦s. |
[*] |
Faire correspondre toutes les propri¨¦t¨¦s d'objet ou ¨¦l¨¦ments de tableau. |
°Ú&±ô³Ù;»å¨¦²ú³Ü³Ù&²µ³Ù;:&±ô³Ù;´Ú¾±²Ô&²µ³Ù;±Õ |
Faire correspondre les ¨¦l¨¦ments du tableau par la plage »å¨¦´Ú¾±²Ô¾±e : &±ô³Ù;»å¨¦²ú³Ü³Ù&²µ³Ù; - le premier index correspondant (compris). S'il n'est pas sp¨¦cifi¨¦, correspond ¨¤ tous les ¨¦l¨¦ments du tableau depuis le d¨¦but. Si n¨¦gatif, sp¨¦cifie le d¨¦calage de d¨¦part ¨¤ partir de la fin du tableau. <fin> - le dernier index correspondant (non compris). S'il n'est pas sp¨¦cifi¨¦, correspond ¨¤ tous les ¨¦l¨¦ments du tableau jusqu'¨¤ la fin. Si n¨¦gatif, sp¨¦cifie le d¨¦calage de d¨¦part ¨¤ partir de la fin du tableau. |
[?(<expression>)] |
Faire correspondre des objets/¨¦l¨¦ments de tableau en appliquant une expression de filtre. |
Pour trouver un segment correspondant en ignorant son ascendance (segment d¨¦tach¨¦), il doit ¨ºtre pr¨¦fix¨¦ par '..' , par exemple $..nom
ou $..['nom']
renvoient les valeurs de toutes les propri¨¦t¨¦s 'name'.
Les noms d'¨¦l¨¦ments correspondants peuvent ¨ºtre extraits en ajoutant un suffixe ~
au JSONPath. Il renvoie le nom de l'objet correspondant ou un index au format cha?ne de l'¨¦l¨¦ment de tableau correspondant. Le format de sortie suit les m¨ºmes r¨¨gles que les autres requ¨ºtes JSONPath - les r¨¦sultats de chemin »å¨¦´Ú¾±²Ô¾±s sont renvoy¨¦s 'tels quels' et les r¨¦sultats de chemin in»å¨¦´Ú¾±²Ô¾±s sont renvoy¨¦s dans un tableau. Cependant, il ne sert ¨¤ rien d'extraire le nom d'un ¨¦l¨¦ment correspondant ¨¤ un chemin »å¨¦´Ú¾±²Ô¾± - il est d¨¦j¨¤ connu.
L'expression de filtre est une expression arithm¨¦tique en notation infix.
°¿±è¨¦°ù²¹²Ô»å±ðs pris en charge :
°¿±è¨¦°ù²¹²Ô»å±ð | Description | Exemple |
---|---|---|
"<text>" '<text>' |
Constante de texte. | 'value: \'1\'' "value: '1'" |
<number> |
Constante num¨¦rique prenant en charge la notation scientifique. | 123 |
<jsonpath starting with $> |
Valeur r¨¦f¨¦renc¨¦e par JSONPath ¨¤ partir du n?ud racine du document d'entr¨¦e ; seuls les chemins »å¨¦´Ú¾±²Ô¾±s sont pris en charge. | $.object.name |
<jsonpath starting with @> |
Valeur r¨¦f¨¦renc¨¦e par le JSONPath ¨¤ partir de l'objet/¨¦l¨¦ment actuel ; seuls les chemins »å¨¦´Ú¾±²Ô¾±s sont pris en charge. | @.name |
°¿±è¨¦°ù²¹³Ù±ð³Ü°ùs pris en charge :
°¿±è¨¦°ù²¹³Ù±ð³Ü°ù | Type | Description | ¸é¨¦²õ³Ü±ô³Ù²¹³Ù |
---|---|---|---|
- |
binaire | Soustraction. | Nombre. |
+ |
binaire | Addition. | Nombre. |
/ |
binaire | Division. | Nombre. |
* |
binaire | Multiplication. | Nombre. |
== |
binaire | Est ¨¦gal ¨¤. | Bool¨¦en (1 ou 0). |
!= |
binaire | N'est pas ¨¦gal ¨¤. | Bool¨¦en (1 ou 0). |
< |
binaire | Est inf¨¦rieur ¨¤. | Bool¨¦en (1 ou 0). |
<= |
binaire | Est inf¨¦rieur ou ¨¦gal ¨¤. | Bool¨¦en (1 ou 0). |
> |
binaire | Est sup¨¦rieur ¨¤. | Bool¨¦en (1 ou 0). |
>= |
binaire | Est sup¨¦rieur ou ¨¦gal ¨¤. | Bool¨¦en (1 ou 0). |
=~ |
binaire | Correspond ¨¤ l'expression r¨¦guli¨¨re. | Bool¨¦en (1 ou 0). |
! |
unaire | Non bool¨¦en. | Bool¨¦en (1 ou 0). |
|| |
binaire | Ou bool¨¦en. | Bool¨¦en (1 ou 0). |
&& |
binaire | Et bool¨¦en. | Bool¨¦en (1 ou 0). |
Les fonctions peuvent ¨ºtre utilis¨¦es ¨¤ la fin d'un JSONPath. Plusieurs fonctions peuvent ¨ºtre cha?n¨¦es si la fonction pr¨¦c¨¦dente renvoie une valeur accept¨¦e par la fonction suivante.
Fonctions prises en charge :
Fonction | Description | ·¡²Ô³Ù°ù¨¦±ð | Sortie |
---|---|---|---|
avg |
Valeur moyenne des nombres dans le tableau d'entr¨¦e. | Tableau de nombres. | Nombre. |
min |
Valeur minimale des nombres dans le tableau d'entr¨¦e. | Tableau de nombres. | Nombre. |
max |
Valeur maximale des nombres dans le tableau d'entr¨¦e. | Tableau de nombres. | Nombre. |
sum |
Somme des nombres dans le tableau d'entr¨¦e. | Tableau de nombres. | Nombre. |
length |
Nombre d'¨¦l¨¦ments dans le tableau d'entr¨¦e. | Tableau. | Nombre. |
first |
Le premier ¨¦l¨¦ment du tableau. | Tableau. | Une construction JSON (objet, tableau, valeur) en fonction du contenu du tableau d'entr¨¦e. |
Les valeurs num¨¦riques entre guillemets sont accept¨¦es par les fonctions d'agr¨¦gation JSONPath. Cela signifie que les valeurs sont converties du type cha?ne en num¨¦rique si l'agr¨¦gation est requise.
Une entr¨¦e incompatible entra?nera la g¨¦n¨¦ration d'une erreur par la fonction.
JSONPaths peut ¨ºtre divis¨¦ en chemins »å¨¦´Ú¾±²Ô¾±s et in»å¨¦´Ú¾±²Ô¾±s. Un chemin »å¨¦´Ú¾±²Ô¾± ne peut renvoyer que null ou une seule correspondance. Un chemin in»å¨¦´Ú¾±²Ô¾± peut renvoyer plusieurs correspondances, essentiellement des JSONPaths avec des listes de noms/index multiples, des morceaux de tableau ou des segments d'expression d¨¦tach¨¦s. Cependant, lorsqu'une fonction est utilis¨¦e, le JSONPath devient »å¨¦´Ú¾±²Ô¾±, car les fonctions g¨¦n¨¨rent toujours une valeur unique.
Un chemin »å¨¦´Ú¾±²Ô¾± renvoie l'objet/tableau/valeur auquel il fait r¨¦f¨¦rence, tandis que le chemin in»å¨¦´Ú¾±²Ô¾± renvoie un tableau des objets/tableaux/valeurs correspondants.
Les espaces (espace, caract¨¨res de tabulation) peuvent ¨ºtre librement utilis¨¦s dans les segments et les expressions de notation entre parenth¨¨ses, par exemple,$[ 'a' ][ 0 ][ ?( $.b == 'c' ) ][ : -1 ].first( )
.
Les cha?nes doivent ¨ºtre entour¨¦es de guillemets simples ' ou doubles ". ? l'int¨¦rieur des cha?nes, les guillemets simples ou doubles (selon ceux qui sont utilis¨¦s pour les encadrer) et les barres obliques inverses \
sont ¨¦chapp¨¦s avec le caract¨¨re barre oblique inverse \
.
{
"books": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95,
"id": 1
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99,
"id": 2
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99,
"id": 3
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99,
"id": 4
}
],
"services": {
"delivery": {
"servicegroup": 1000,
"description": "Next day delivery in local town",
"active": true,
"price": 5
},
"bookbinding": {
"servicegroup": 1001,
"description": "Printing and assembling book in A5 format",
"active": true,
"price": 154.99
},
"restoration": {
"servicegroup": 1002,
"description": "Various restoration methods",
"active": false,
"methods": [
{
"description": "Chemical cleaning",
"price": 46
},
{
"description": "Pressing pages damaged by moisture",
"price": 24.5
},
{
"description": "Rebinding torn book",
"price": 99.49
}
]
}
},
"filters": {
"price": 10,
"category": "fiction",
"no filters": "no \"filters\""
},
"closed message": "Store is closed",
"tags": [
"a",
"b",
"c",
"d",
"e"
]
}
JSONPath | Type | ¸é¨¦²õ³Ü±ô³Ù²¹³Ù | Commentaires |
---|---|---|---|
$.filters.price |
»å¨¦´Ú¾±²Ô¾± | 10 | |
$.filters.category |
»å¨¦´Ú¾±²Ô¾± | fiction | |
$.filters['no filters'] |
»å¨¦´Ú¾±²Ô¾± | no "filters" | |
$.filters |
»å¨¦´Ú¾±²Ô¾± | { "price": 10, "category": "fiction", "no filters": "no \"filters\"" } |
|
$.books[1].title |
»å¨¦´Ú¾±²Ô¾± | Sword of Honour | |
$.books[-1].author |
»å¨¦´Ú¾±²Ô¾± | J. R. R. Tolkien | |
$.books.length() |
»å¨¦´Ú¾±²Ô¾± | 4 | |
$.tags[:] |
in»å¨¦´Ú¾±²Ô¾± | ["a", "b", "c", "d", "e" ] | |
$.tags[2:] |
in»å¨¦´Ú¾±²Ô¾± | ["c", "d", "e" ] | |
$.tags[:3] |
in»å¨¦´Ú¾±²Ô¾± | ["a", "b", "c"] | |
$.tags[1:4] |
in»å¨¦´Ú¾±²Ô¾± | ["b", "c", "d"] | |
$.tags[-2:] |
in»å¨¦´Ú¾±²Ô¾± | ["d", "e"] | |
$.tags[:-3] |
in»å¨¦´Ú¾±²Ô¾± | ["a", "b"] | |
$.tags[:-3].length() |
»å¨¦´Ú¾±²Ô¾± | 2 | |
$.books[0, 2].title |
in»å¨¦´Ú¾±²Ô¾± | ["Sayings of the Century", "Moby Dick"] | |
$.books[1]['author', "title"] |
in»å¨¦´Ú¾±²Ô¾± | ["Evelyn Waugh", "Sword of Honour"] | |
$..id |
in»å¨¦´Ú¾±²Ô¾± | [1, 2, 3, 4] | |
$.services..price |
in»å¨¦´Ú¾±²Ô¾± | [5, 154.99, 46, 24.5, 99.49] | |
$.books[?(@.id == 4 - 0.4 * 5)].title |
in»å¨¦´Ú¾±²Ô¾± | ["Sword of Honour"] | This query shows that arithmetical operations can be used in queries. Of course this query can be simplified to $.books[?(@.id == 2)].title |
$.books[?(@.id == 2 \|\| @.id == 4)].title |
in»å¨¦´Ú¾±²Ô¾± | ["Sword of Honour", "The Lord of the Rings"] | |
$.books[?(!(@.id == 2))].title |
in»å¨¦´Ú¾±²Ô¾± | ["Sayings of the Century", "Moby Dick", "The Lord of the Rings"] | |
$.books[?(@.id != 2)].title |
in»å¨¦´Ú¾±²Ô¾± | ["Sayings of the Century", "Moby Dick", "The Lord of the Rings"] | |
$.books[?(@.title =~ " of ")].title |
in»å¨¦´Ú¾±²Ô¾± | ["Sayings of the Century", "Sword of Honour", "The Lord of the Rings"] | |
$.books[?(@.price > 12.99)].title |
in»å¨¦´Ú¾±²Ô¾± | ["The Lord of the Rings"] | |
$.books[?(@.author > "Herman Melville")].title |
in»å¨¦´Ú¾±²Ô¾± | ["Sayings of the Century", "The Lord of the Rings"] | |
$.books[?(@.price > $.filters.price)].title |
in»å¨¦´Ú¾±²Ô¾± | ["Sword of Honour", "The Lord of the Rings"] | |
$.books[?(@.category == $.filters.category)].title |
in»å¨¦´Ú¾±²Ô¾± | ["Sword of Honour","Moby Dick","The Lord of the Rings"] | |
$..[?(@.id)] |
in»å¨¦´Ú¾±²Ô¾± | [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95, "id": 1 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99, "id": 2 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99, "id": 3 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99, "id": 4 } ] |
|
$.services..[?(@.price > 50)].description |
in»å¨¦´Ú¾±²Ô¾± | '["Printing and assembling book in A5 format", "Rebinding torn book"] | |
$..id.length() |
»å¨¦´Ú¾±²Ô¾± | 4 | |
$.books[?(@.id == 2)].title.first() |
»å¨¦´Ú¾±²Ô¾± | Sword of Honour | |
$..tags.first().length() |
»å¨¦´Ú¾±²Ô¾± | 5 | $..tags is indefinite path, so it returns an array of matched elements - [["a", "b", "c", "d", "e" ]], first() returns the first element - ["a", "b", "c", "d", "e" ] and finally length() calculates its length - 5. |
$.books[*].price.min() |
»å¨¦´Ú¾±²Ô¾± | 8.95 | |
$..price.max() |
»å¨¦´Ú¾±²Ô¾± | 154.99 | |
$.books[?(@.category == "fiction")].price.avg() |
»å¨¦´Ú¾±²Ô¾± | 14.99 | |
$.books[?(@.category == $.filters.xyz)].title |
in»å¨¦´Ú¾±²Ô¾± | A query without match returns NULL for definite and indefinite paths. | |
$.services[?(@.active=="true")].servicegroup |
in»å¨¦´Ú¾±²Ô¾± | [1000,1001] | Text constants must be used in boolean value comparisons. |
$.services[?(@.active=="false")].servicegroup |
in»å¨¦´Ú¾±²Ô¾± | [1002] | Text constants must be used in boolean value comparisons. |
$.services[?(@.servicegroup=="1002")]~.first() |
»å¨¦´Ú¾±²Ô¾± | restoration |