[comment]: # ({ece5d44c-16d8a00a})
# 4 JSONPath функционалност

[comment]: # ({/ece5d44c-16d8a00a})

[comment]: # ({aac69794-a806c032})
#### Преглед

Овај одељак описује подржану JSONPath функционалност у оквиру корака претходне обраде вредности ставке.

JSONPath се састоји од сегмената раздвојених тачкама.
Сегмент може бити у облику једноставне речи, која представља име JSON вредности, џокера (`*`) или сложеније конструкције затворене у угласте заграде.
Тачка испред сегмента у заградама је опционална и може се изоставити.

|JSONPath example|Description|
|-----|-----|
|`$.object.name`|Return `object.name` contents.|
|`$.object['name']`|Return `object.name` contents.|
|`$.object.['name']`|Return `object.name` contents.|
|`$["object"]['name']`|Return `object.name` contents.|
|`$.['object'].["name"]`|Return `object.name` contents.|
|`$.object.history.length()`|Return the number of `object.history` array elements.|
|`$[?(@.name == 'Object')].price.first()`|Return the value of the `price` property from the first object named "Object".|
|`$[?(@.name == 'Object')].history.first().length()`|Return the number of history array elements from the first object named "Object".|
|`$[?(@.price > 10)].length()`|Return the number of objects with a price greater than 10.|

Погледајте такође: [Избегавање специјалних знакова из LLD макро вредности у JSONPath](/manual/config/items/preprocessing/jsonpath_functionality/escaping_lld_macros).

[comment]: # ({/aac69794-a806c032})

[comment]: # ({1298c5a2-74fc1571})
#### Подржани сегменти

|Segment|Description|
|--|--------|
|`<name>`|Подударање својства објекта по имену.|
|`*`|Подударање свих својстава објекта.|
|`['<name>']`|Подударање својства објекта по имену.|
|`['<name>', '<name>', ...]`|Подударање својства објекта по било ком од наведених имена.|
|`[<index>]`|Подударање елемента низа по индексу.|
|`[<number>, <number>, ...]`|Подударање елемента низа по било ком од наведених индекса.|
|`[*]`|Подударање свих својстава објекта или елемената низа.|
|`[<start>:<end>]`|Подударање елемената низа по дефинисаном опсегу:<br>**<start>** - први индекс који се подудара (укључујући); ако није наведено, подудара се са свим елементима низа од почетка; Ако је негативно, одређује почетни помак од краја низа;<br>**<end>** - последњи индекс који се подудара (искључујући); ако није наведено, подудара све елементе низа до краја; ако је негативно, одређује почетни помак од краја низа.|
|`[?(<expression>)]`|Подударање објеката/елемената низа применом израза филтера.|

Да бисте пронашли подударни сегмент игноришући његово порекло (одвојени сегмент), мора имати префикс од две тачке (`..`).
На пример, `$..name` или `$..['name']` враћају вредности свих својстава `name`.

Називи подударних елемената могу се издвојити додавањем суфикса тилде (`~`) на JSONPath.
Враћа име подударног објекта или индекс у формату стринга подударног елемента низа.
Излазни формат прати иста правила као и други JSONPath упити - резултати одређене путање се враћају 'as is', а резултати неодређене путање се враћају у низу.
Међутим, постоји минимална вредност у издвајању имена елемента који одговара дефинитивној путањи, као што је већ познато.

[comment]: # ({/1298c5a2-74fc1571})

[comment]: # ({67ca5f43-5eac028e})
#### Израз филтера

Израз филтера је аритметички израз у инфиксној нотацији.

Подржани операнди:

|Operand|Description|
|---|-------|
|`"<text>"`<br>`'<text>'`|Text constant.<br><br>Example:<br>`'value: \\'1\\''`<br>`"value: '1'"`|
|`<number>`|Numeric constant supporting scientific notation.<br><br>Example: `123`|
|`<jsonpath starting with $>`|Value referred to by the JSONPath from the input document root node; only definite paths are supported.<br><br>Example: `$.object.name`|
|`<jsonpath starting with @>`|Value referred to by the JSONPath from the current object/element; only definite paths are supported.<br><br>Example: `@.name`|

Подржани оператори:

|Operator|Type|Description|Result|
|-|---|---|---|
|`-`|Binary|Subtraction|Number|
|`+`|Binary|Addition|Number|
|`/`|Binary|Division|Number|
|`*`|Binary|Multiplication|Number|
|`==`|Binary|Equality|Boolean (1/0)|
|`!=`|Binary|Inequality|Boolean (1/0)|
|`<`|Binary|Less than|Boolean (1/0)|
|`<=`|Binary|Less than or equal to|Boolean (1/0)|
|`>`|Binary|Greater than|Boolean (1/0)|
|`>=`|Binary|Greater than or equal to|Boolean (1/0)|
|`=~`|Binary|Matches regular expression|Boolean (1/0)|
|`!`|Unary|Boolean NOT|Boolean (1/0)|
|`||`|Binary|Boolean OR|Boolean (1/0)|
|`&&`|Binary|Boolean AND|Boolean (1/0)|

[comment]: # ({/67ca5f43-5eac028e})

[comment]: # ({8c75d01d-b66eb391})
#### Функције

Функције се могу користити на крају JSONPath-а.
Више функција може бити повезано ако претходна функција враћа вредност коју прихвата следећа функција.

Подржане функције:
|Function|Description|Input|Output|
|-|----|- -|---|
|`avg `|Просечна вредност бројева у улазном низу|Низ бројева|Број|
|`min `|Минимум вредност бројева у улазном низу|Низ бројева|Број|
|`max `|Максимална вредност бројева у улазном низу|Низ бројева|Број|
|`sum `|Збир бројева у улазном низу|Низ бројева |Број|
|`length `|Број елемената у улазном низу|Низ|Број|
|`first `|Први елемент низа|Низ| JSON конструкција (објекат, низ, вредност) у зависности од садржаја улазног низа|

JSONPath агрегатне функције прихватају наведене нумеричке вредности.
Ове вредности се аутоматски конвертују из стрингова у нумеричке типове када је агрегација потребна. Некомпатибилно унос ће проузроковати да функција генерише грешку.

[comment]: # ({/8c75d01d-b66eb391})

[comment]: # ({e739c583-729c09d6})
#### Излазна вредност

JSONPaths се могу поделити на одређене и неодређене путање.
Дефинитивна путања може да врати само нулл или једно подударање.
Неодређена путања може да врати вишеструка подударања: JSONPaths са одвојеним, вишеструким листама имена/индекса, исечцима низа или сегментима израза.
Међутим, када ако се користи функција, JSONPath постаје дефинитиван, пошто функције увек излазе једну вредност.

Дефинитивна путања враћа објекат/низ/вредност на коју упућује.
Насупрот томе, неодређена путања враћа низ одговарајућих објеката/низова/вредности.

::: noteimportant
Редослед својстава у резултатима упита JSONPath можда неће бити усклађен са оригиналним редоследом JSON својстава због интерне оптимизације методе.
На пример, JSONPath `$.books[1]["author", "title"]` може да врати `["title", "author"]`.Ако је очување оригиналног поретка својстава неопходно, треба размотрити алтернативне методе обраде након упита.
:::

[comment]: # ({/e739c583-729c09d6})

[comment]: # ({b5105ad4-5f0aac44})
#### Правила за форматирање путање

Размаци (размак, знак табулатора) се могу користити у сегментима и изразима за означавање заграда, на пример: `$[ 'а' ][ 0 ][ ?( $.b == 'c') ][ : -1 ]. first ( )`.

Стрингови треба да буду затворени једноструким (`'`) или двоструким (`"`) наводницима.
Унутар стрингова, једноструки или двоструки наводники (у зависности од тога који се затворите га) и обрнуте косе црте (`\`) се избацују карактером обрнуте косе црте (`\`).

[comment]: # ({/b5105ad4-5f0aac44})

[comment]: # ({f476ebb9-4c860844})
#### Примери

[comment]: # ({/f476ebb9-4c860844})

[comment]: # ({b5257e6a-93072157})
```json
{
     "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|Result|
|---|-|------|
|`$.filters.price`|definite|10|
|`$.filters.category`|definite|фикција|
|`$.filters['без филтера']`|definite|без "филтера"|
|`$.filters`|definite|{<br>"price": 10,<br>"category": "фикција",<br>"без филтера": "без \\"филтера\\""<br>}|
|`$.books[1].title`|definite|Мач части|
|`$.books[-1].author`|definite|J. Р. Р. Толкин|
|`$.books.length()`|definite|4|
|`$.tags[:]`|indefinite|\["a", "b", "c", "d", "e" \]|
|`$.tags[2:]`|indefinite|\["c", "d", "e" \]|
|`$.tags[:3]`|indefinite|\["a", "b", "c"\]|
|`$.tags[1:4]`|indefinite|\["b", "c", "d"\]|
|`$.tags[-2:]`|indefinite|\["d", "e"\]|
|`$.tags[:-3]`|indefinite|\["a", "b"\]|
|`$.tags[:-3].length()`|definite|2|
|`$.books[0, 2].title`|indefinite|\[„Моби Дик“, „Изреке века“\]|
|`$.books[1]['author', "title"]`|indefinite|\[„Мач части“, „Евелин Во“\]|
|`$..id`|indefinite|\[1, 2, 3, 4\]|
|`$.services..price`|indefinite|\[154.99, 5, 46, 24.5, 99.49\]|
|`$.books[?(@.id == 4 - 0.4 * 5)].title`|indefinite|\[„Мач части“\]<br><br>Напомена: Овај упит показује да се аритметичке операције могу користити у упитима; може се поједноставити на `$.books[?(@.id == 2)].title`|
|`$.books[?(@.id == 2 \|\| @.id == 4)].title`|indefinite|\["Мач части", "Господар прстенова"\]|
|`$.books[?(!(@.id == 2))].title`|indefinite|\["Изреке века", "Моби Дик", "Господар прстенова"\]|
|`$.books[?(@.id != 2)].title`|indefinite|\["Изреке века", "Моби Дик", "Господар прстенова"\]|
|`$.books[?(@.title =~ " од ")].title`|indefinite|\["Изреке века", "Мач части", "Господар прстенова" Прстењеви"\]|
|`$.books[?(@.price > 12.99)].title`|indefinite|\["Господар прстенова"\]|
|`$.books[?(@.author > "Херман Мелвил")].title`|indefinite|\["Изреке века", "Господар прстенова"\]|
|`$.books[?(@.price > $.filters.price)].title`|indefinite|\["Мач части", "Господар прстенова"\]|
|`$.books[?(@.category == $.filters.category)].title`|indefinite|\["Мач части","Моби Дик","Господар прстенова"\]|
|`$.books[?(@.category == "фикција" && @.price < 10)].title`|indefinite|\["Моби Дик"\]|
|`$..[?(@.id)]`|неодређено|\[<br>{<br>"цена": 8,95,<br>"ид": 1,<br>"категорија": "референца",<br>"аутор": "Најџел Рис",<br>"наслов": "Изреке века"<br>},<br>{<br>"цена": 12,99,<br>"ид": 2,<br>"категорија": "фикција",<br>"аутор": "Евелин Во",<br>"наслов": "Мач части"<br>},<br>{<br>"цена": 8,99,<br>"ид": 3,<br>"категорија": "фикција",<br>"аутор": "Херман Мелвил",<br>"наслов": "Моби Дик",<br>"исбн": "0-553-21311-3"<br>},<br>{<br>"цена": 22,99,<br>"ид": 4,<br>"категорија": "фикција",<br>"аутор": "Џ. Р. Р. Толкин",<br>"наслов": "Господар прстенова",<br>"исбн": "0-395-19395-8"<br>}<br>\]|
|`$.услуге..[?(@.цена > 50)].опис`|неодређено|\["Штампање и састављање књиге у А5 формату", "Поновно повезивање поцепане књиге"\]|
|`$.books[?(@.id == 2)].title.first()`|definite|Sword of Honour|
|`$..tags.first().length()`|definite|5<br><br>Напомена: `$..tags` је неодређена путања, тако да враћа низ подударних елемената, тј. `[["a", "b", "c", "d", "e" ]]`; `first()` враћа први елемент, тј. `["a", "b", "c", "d", "e"]`; `length()` израчунава дужину елемента, тј. `5`.|
|`$.books[*].price.min()`|definite|8.95|
|`$..price.max()`|definite|154.99|
|`$.books[?(@.category == "fiction")].price.avg()`|definite|14.99|
|`$.books[?(@.category == $.filters.xyz)].title`|indefinite|Напомена: Упит без подударања враћа NULL за одређене и неодређене путање.|
|`$.services[?(@.active=="true")].servicegroup`|indefinite|\[1001,1000\]<br><br>Напомена: Текстуалне константе морају се користити у буловој вредности поређења.|
|`$.services[?(@.active=="false")].servicegroup`|indefinite|\[1002\]<br><br>Напомена: Текстуалне константе морају се користити у поређењима булових вредности.|
|`$.services[?(@.servicegroup=="1002")]~.first()`|definite|restoration|

[comment]: # ({/b5257e6a-93072157})
