Áú»¢¶Ä²©

This is the documentation page for an unsupported version of Áú»¢¶Ä²©.
Is this not what you were looking for? Switch to the current version or choose one from the drop-down menu.

3 Fonctionnalit¨¦ JSONPath

Aper?u

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.

Segments pris en charge

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.

Expression de filtre

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).

Fonctions

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.

Valeur de retour

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.

Espace blanc

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( ).

Cha?nes de caract¨¨res

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 \.

Exemples

Donn¨¦es d'entr¨¦e
{
         "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