ДОВІДНИК З NODE-RED українською мовою
Тут розглядається способи представлення результатів на виході JSONata.
Як зазначалося раніше, якщо шлях розташування у вхідному документі відповідає декільком значенням, ці значення повертаються як масив. Значення у документі можуть бути як об’єктами так і масивами, але значення що повертаються знаходяться на верхньому рівні у вигляді масиву. Можна побудувати додаткову структуру в результуючому масиві, вказавши у виразі шляху розташування конструктор масивів (або об’єктів). У будь-якій точці шляху розташування, де очікується посилання на поле, можна вставити пару квадратних дужок [], щоб вказати, що результати вираження в цих дужках повинні міститися в новому масиві на виході. Коми використовуються для розділення декількох виразів у конструкторі масиву. У таблиці 11.9 показні приклади конструкторів масивів. Можна перевірити ці приклади, перейшовши на сайт `http://try.jsonata.org/ (виберіть приклад Address).
{
"FirstName": "Fred",
"Surname": "Smith",
"Age": 28,
"Address": {
"Street": "Hursley Park",
"City": "Winchester",
"Postcode": "SO21 2JN"
},
"Email": [
{
"type": "work",
"address": ["fred.smith@my-work.com", "fsmith@my-work.com"]
},
{
"type": "home",
"address": ["freddy@my-social.com", "frederic.smith@very-serious.com"]
}
],
"Other": {
"Over 18 ?": true,
"Misc": null,
"Alternative.Address": {
"Street": "Brick Lane",
"City": "London",
"Postcode": "E1 6RF"
}
}
}
Таблиця 11.9.
JSONata | Result | Коментар |
---|---|---|
Email.address |
[ "fred.smith@my-work.com", "fsmith@my-work.com", "freddy@my-social.com", "frederic.smith@very-serious.com" ] |
Чотири адреси електронної пошти повертаються в плоскому масиві |
Email.[address] ` ` |
[ [ "fred.smith@my-work.com", "fsmith@my-work.com" ], [ "freddy@my-social.com", "frederic.smith@very-serious.com" ] ] |
Кожен об’єкт електронної пошти генерує масив адрес |
[Address, Other. Alternative.Address].City |
[ "Winchester", "London" ] |
Вибирає значення City як з об’єкту Address так і з Alternative.Address . |
Подібно до того, як можна побудувати масиви, так само можуть бути побудовані на виході об’єкти JSON. У будь-якій точці шляху розташування, де очікується посилання на поле, можна використати пару фігурних дужок {}, що містять пари ключ/значення, розділені комами, з кожним ключем і значенням, розділеними двокрапкою: {key1: value2, key2: value2}. Ключі та значення можуть бути літералами або можуть бути виразами. Ключ повинен бути або рядком, або виразом, який оцінюється до рядка. Коли за виразом, що вибирає кілька значень, йде конструктор об’єктів, той створить єдиний об’єкт з парою ключ/значення для кожного з цих значень контексту. Якщо потрібний масив об’єктів (один для кожного значення контексту), то конструктор об’єкта повинен слідувати за точкою ‘.’ . У таблиці 11.10 показні приклади конструкторів об’єктів. Можна перевірити ці приклади, перейшовши на сайт `http://try.jsonata.org/ (виберіть приклад Address).
{"Phone": [
{"type": "home",
"number": "0203 544 1234"
},
{"type": "office",
"number": "01962 001234"
},
{"type": "office",
"number": "01962 001235"},
{"type": "mobile",
"number": "077 7700 1234"
}]}
Таблиця 11.10.
JSONata | Result | Коментар |
---|---|---|
Phone.{type: number} |
[ { "home": "0203 544 1234" }, { "office": "01962 001234" }, { "office": "01962 001235" }, { "mobile": "077 7700 1234" } ] |
Створює масив об’єктів (по одному для кожного телефону). |
Phone{type: number} ` ` |
{ "home": "0203 544 1234", "office": [ "01962 001234", "01962 001235" ], "mobile": "077 7700 1234" } ` ` |
Об’єднує пари ключ/значення в один об’єкт. Докладніше див.` Grouping using object key expression |
Phone{type: number[]} |
{ "home": [ "0203 544 1234" ], "office": [ "01962 001234", "01962 001235" ], "mobile": [ "077 7700 1234" ] } ` ` |
Об’єднує пари ключ/значення в один об’єкт. У цьому випадку для узгодженості всі числа групуються в масиви. Див. Singleton array and value equivalence. |
Конструктори масиву та об’єкта використовують стандартний синтаксис JSON для масивів і об’єктів. На додаток до цих значень можна ввести в вираз інші типи даних JSON, використовуючи власний синтаксис JSON:
strings - "hello world"
numbers - 34.5
Booleans - true
or false
nulls - null
objects - {"key1": "value1", "key2": "value2"}
arrays - ["value1", "value2"]
JSONata є надмножиною JSON. Це значить, що будь-який дійсний документ JSON також є дійсним виразом JSONata. Це властивість дозволяє використовувати документ JSON як шаблон для бажаного виводу, а потім замінити його частинами виразами для вставки даних у вихідні дані з вхідного документа.