Aquesta secci¨® proporciona detalls sobre la funcionalitat JSONPath admesa a les passes de preprocessament del valor de l'element.
JSONPath consta de segments separats per punts. Un segment pot ¨¦sser una paraula simple com un nom de valor JSON, (*
) o una construcci¨® m¨¦s complexa entre claud¨¤tors. El per¨ªode de separaci¨® abans del segment entre par¨¨ntesis ¨¦s opcional i es pot ometre. Per exemple:
°ä²¹³¾¨ª | ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨® |
---|---|
$.object.name |
Retorna el contingut d'object.name . |
$.object['name'] |
Retorna el contingut d'object.name.| | $.object.['name']|Retorna el contingut d'object.name . |
$["object"]['name'] |
Retorna el contingut d'object.name.| | $.['object'].["name"]|Retorna el contingut d'object.name . |
$.object.history.length() |
Retorna el nombre d'elements de la matriu object.history . |
$[?(@.name == 'Objecte')].price.first() |
Retorna el camp de preu del primer objecte amb el nom "Objecte". |
$[?(@.name == 'Objecte')].history.first().length() |
Retorna el nombre d'elements a la matriu d'historial del primer objecte amb el nom "Objecte". |
$[?(@.price > 10)].length() |
Retorna el nombre d'articles el preu dels quals ¨¦s superior a 10. |
Veieu tamb¨¦: Escapar de car¨¤cters especials dels valors de macro LLD a JSONPath.
Segment | ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨® |
---|---|
<nom> |
Concorda la propietat de l'objecte pel nom. |
* |
Coincideix amb totes les propietats de l'objecte. |
['<nom>'] |
Concorda la propietat de l'objecte pel nom. |
['<nom>', '<nom>', ...] |
Fa coincidir la propietat de l'objecte amb un dels noms de la llista. |
[<index>] |
Concorda element de matriu per ¨ªndex. |
[<nombre>, <nombre>, ...] |
Fa coincidir l'element de la matriu amb un dels ¨ªndexs llistats. |
[*] |
Coincideix amb totes les propietats de l'objecte o els elements de la matriu. |
[<inici>:<fi>] |
Concorda els elements de la matriu segons l'interval definit: <inici> - el primer ¨ªndex coincident (incl¨°s). Si no s'especifica, coincideix amb tots els elements de la matriu des del principi. Si ¨¦s negatiu, especifica el despla?ament inicial des del final de la matriu. <fi> - el darrer ¨ªndex coincident (no incl¨°s). Si no s'especifica, coincideix amb tots els elements de la matriu fins al final. Si ¨¦s negatiu, especifica el despla?ament inicial des del final de la matriu. |
[?(<expression>)] |
Concorda objectes/elements de matriu aplicant una expressi¨® de filtre. |
Per trobar un segment coincident ignorant la seva ascend¨¨ncia (segment separat), ha d'anar prefixat amb dos punts ('..'). Per exemple, $..name
o $..['name']
retornen els valors de totes les propietats name
.
Els noms dels elements coincidents es poden extreure afegint un sufix barrat ~
al JSONPath. Retorna el nom de l'objecte corresponent o un ¨ªndex de cadena de l'element de matriu corresponent. El format de sortida segueix les mateixes regles que altres consultes JSONPath: els resultats del cam¨ª definit es retornen 'tal qual' i els resultats del cam¨ª no definit es retornen en una matriu. Tot i aix¨ª, no t¨¦ sentit extreure el nom d'un element corresponent a un cam¨ª definit: ja se sap.
L'expressi¨® de filtre ¨¦s una expressi¨® aritm¨¨tica en notaci¨® infix.
Operands admesos:
Operand | ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨® |
---|---|
"<text>" '<text>' |
Constant de text. Exemple: 'value: \\'1\\'' "value: '1'" |
<nombre> |
Constante num¨¨rica que suporta la notaci¨® cient¨ªfica. Exemple: 123 |
<jsonpath comen?a amb $> |
Valor al qual fa refer¨¨ncia JSONPath des del node arrel del document d'entrada; nom¨¦s s'admeten els camins definits. Exemple: $.object.name |
<jsonpath comen?a amb @> |
Valor referenciat pel JSONPath des de l'objecte/element actual; nom¨¦s s'admeten els camins definits. Exemple: @.name |
Operadors compatibles:
Operador | Tipus | ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨® | Resultat |
---|---|---|---|
- |
binari | Resta. | Nombre. |
+ |
binari | Suma. | Nombre. |
/ |
binari | ¶Ù¾±±¹¾±²õ¾±¨®. | Nombre. |
* |
binari | ²Ñ³Ü±ô³Ù¾±±è±ô¾±³¦²¹³¦¾±¨®. | Nombre. |
== |
binari | Igual. | Boole¨¤ (1 o 0). |
!= |
binari | No ¨¦s igual a. | Boole¨¤ (1 o 0). |
< |
binari | ?s inferior a. | Boole¨¤ (1 o 0). |
<= |
binari | ?s menor o igual a. | Boole¨¤ (1 o 0). |
> |
binari | ?s m¨¦s gran que. | Boole¨¤ (1 o 0). |
>= |
binari | ?s m¨¦s gran o igual que. | Boole¨¤ (1 o 0). |
=~ |
binari | Coincideix amb l'expressi¨® regular. | Boole¨¤ (1 o 0). |
! |
unitari | No boole¨¤. | Boole¨¤ (1 o 0). |
|| |
binari | O boole¨¤. | Boole¨¤ (1 o 0). |
&& |
binari | I boole¨¤. | Boole¨¤ (1 o 0). |
Les funcions es poden emprar al final d'un JSONPath. Es poden encadenar diverses funcions si la funci¨® anterior retorna un valor acceptat per la funci¨® seg¨¹ent.
Funcions admeses:
¹ó³Ü²Ô³¦¾±¨® | ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨® | Entrada | Sortida |
---|---|---|---|
avg |
Valor mitj¨¤ dels nombres a una matriu d'entrada | Matriu de nombres | Nombre |
min |
Valor m¨ªnim dels nombres a una matriu d'entrada | Matriu de nombres | Nombre |
max |
Valor m¨¤xim dels nombres a una matriu d'entrada | Matriu de nombres | Nombre |
sum |
Suma de nombres d'una matriu d'entrada | Matriu de nombres | Nombre |
length |
Nombre d'elements a una matriu d'entrada. | Matri. | Nombre |
first |
El primer element de la matriu | Matriu | Una construcci¨® JSON (objecte, matriu, valor) basada en el contingut de la matriu d'entrada |
Els valors num¨¨rics entre cometes s¨®n admesos per les funcions agregades JSONPath. Aix¨° vol dir que els valors es converteixen del tipus de cadena a num¨¨ric si cal l'agregaci¨®. Una entrada incompatible far¨¤ que la funci¨® generi un error.
Els camins JSON es poden dividir en camins definits i no definits. Un cam¨ª definit nom¨¦s pot retornar una coincid¨¨ncia nul¡¤la o ¨²nica. Un cam¨ª no definit pot retornar diverses coincid¨¨ncies: JSONPaths amb diverses llistes de nom/¨ªndex, fragments de matriu o segments d'expressi¨® separats. Tanmateix, quan s'empra una funci¨®, el JSONPath s'estableix, ja que les funcions sempre generen un valor ¨²nic.
Un cam¨ª definit retorna l'objecte/matriu/valor al qual fa refer¨¨ncia. En canvi, el cam¨ª no definit retorna una matriu dels objectes/matrius/valors corresponents.
?s possible que l'ordre de la propietat dels resultats de la consulta JSONPath no s'alinei amb l'ordre de la propietat JSON original a causa dels m¨¨todes d'optimitzaci¨® interns. Per exemple, el JSONPath $.books[1]["author", "title"]
pot retornar ["title", "author"]
. Si conservar l'ordre de propietat original ¨¦s essencial, s'han de considerar m¨¨todes alternatius de processament posterior a la consulta.
Els espais en blanc (espai, car¨¤cter de tabulaci¨®) es poden emprar en segments i expressions de notaci¨® de claud¨¤tors, per exemple: $[ 'a' ][ 0 ][ ?( $.b == 'c' ) ][ : -1 ].first ( )
.
Les cadenes s'han de tancar amb cometes simples ('
) o dobles ("
). Dins de les cadenes, les cometes simples o dobles (segons quines s'utilitzin per tancar-la) i les barres invertides (\
) s'escapen amb el car¨¤cter de barra invertida (\
).
{
"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 | Tipus | Resultat | |
---|---|---|---|
$.filters.price |
definit | 10 | |
$.filters.category |
definit | ´Ú¾±³¦³¦¾±¨® | |
$.filters['no filters'] |
definit | no "filters" | |
$.filters |
definit | { "price": 10, "category": "´Ú¾±³¦³¦¾±¨®", "no filters": "no \"filters\"" } |
|
$.books[1].title |
definit | Sword of Honour | |
$.books[-1].author |
definit | J. R. R. Tolkien | |
$.books.length() |
definit | 4 | |
$.tags[:] |
indefinit | ["a", "b", "c", "d", "e" ] | |
$.tags[2:] |
indefinit | ["c", "d", "e" ] | |
$.tags[:3] |
indefinit | ["a", "b", "c"] | |
$.tags[1:4] |
indefinit | ["b", "c", "d"] | |
$.tags[-2:] |
indefinit | ["d", "e"] | |
$.tags[:-3] |
indefinit | ["a", "b"] | |
$.tags[:-3].length() |
definit | 2 | |
$.books[0, 2].title |
indefinit | ["Moby Dick", "Sayings of the Century"] | |
$.books[1]['author', "title"] |
indefinit | ["Sword of Honour", "Evelyn Waugh"] | |
$..id |
indefinit | [1, 2, 3, 4] | |
$.services..price |
indefinit | [5, 154.99, 46, 24.5, 99.49] | |
$.books[?(@.id == 4 - 0.4 * 5)].title |
indefinit | ["Sword of Honour"] Nota: Aquesta cerca ensenya que les operacions aritm¨¨tiques es poden emprar a les consultes. Evidentment, aquesta consulta es pot simplificar com a $.books[?(@.id == 2)].title |
|
$.books[?(@.id == 2 \|\| @.id == 4)].title |
indefinit | ["Sword of Honour", "The Lord of the Rings"] | |
$.books[?(!(@.id == 2))].title |
indefinit | ["Sayings of the Century", "Moby Dick", "The Lord of the Rings"] | |
$.books[?(@.id != 2)].title |
indefinit | ["Sayings of the Century", "Moby Dick", "The Lord of the Rings"] | |
$.books[?(@.title =~ " of ")].title |
indefinit | ["Sayings of the Century", "Sword of Honour", "The Lord of the Rings"] | |
$.books[?(@.price > 12.99)].title |
indefinit | ["The Lord of the Rings"] | |
$.books[?(@.author > "Herman Melville")].title |
indefinit | ["Sayings of the Century", "The Lord of the Rings"] | |
$.books[?(@.price > $.filters.price)].title |
indefinit | ["Sword of Honour", "The Lord of the Rings"] | |
$.books[?(@.category == $.filters.category)].title |
indefinit | ["Sword of Honour","Moby Dick","The Lord of the Rings"] | |
$.books[?(@.category == "´Ú¾±³¦³¦¾±¨®" && @.price < 10)].title |
indefinit | ["Moby Dick"] | |
$..[?(@.id)] |
indefinit | [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95, "id": 1 }, { "category": "´Ú¾±³¦³¦¾±¨®", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99, "id": 2 }, { "category": "´Ú¾±³¦³¦¾±¨®", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99, "id": 3 }, { "category": "´Ú¾±³¦³¦¾±¨®", "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 |
indefinit | '["Printing and assembling book in A5 format", "Rebinding torn book"] | |
$..id.length() |
definit | 4 | |
$.books[?(@.id == 2)].title.first() |
definit | Sword of Honour | |
$..tags.first().length() |
definit | 5 Nota: $..etiquetes ¨¦s un cam¨ª indefinit, pel que retornar¨¤ una matriu d'elements trobats, com ara [["a", "b", "c", "d", "e" ]] ; first() retorna el primer element, com ara ["a", "b", "c", "d", "e" ] ; length() calcula la seva allargada - 5. |
|
$.books[*].price.min() |
definit | 8.95 | |
$..price.max() |
definit | 154.99 | |
$.books[?(@.category == "´Ú¾±³¦³¦¾±¨®")].price.avg() |
definit | 14.99 | |
$.books[?(@.category == $.filters.xyz)].title |
indefinit | Nota: Una consulta sense trobar res retornar¨¤ NULL per camins definits i indefinits. |
|
$.services[?(@.active=="true")].servicegroup |
indefinit | [1001,1000] Nota: Les constants de text s'han d'emprar a les comparacions de valors booleans. |
|
$.services[?(@.active=="false")].servicegroup |
indefinit | [1002] Nota: Les constants de text s'han d'emprar a les comparacions de valors booleans. |
|
$.services[?(@.servicegroup=="1002")]~.first() |
definit | °ù±ð²õ³Ù²¹³Ü°ù²¹³¦¾±¨® |