Функція ParseJSON
Застосовується до: програм Canvas Командного Power Pages Power Platform рядка на основі моделі
Інтерпретує рядок JSON і повертає нетипізований об’єкт.
Опис
Функція ParseJSON аналізуватиме припустимий рядок JSON повертатиме нетипізований об’єкт, що представляють структуру JSON.
Функція ParseJSON може повертати помилки, якщо текст недійсний JSON відповідно до формату JavaScript Object Notation (JSON), описаного в ECMA-404 та IETF RFC 8259.
Синтаксис
ParseJSON( JSONString )
- JSONString – Обов’язковий. Структура JSON, представлена як текст.
Перетворення типу даних «Нетипізований об’єкт»
ParseJSON повертає нетипізований об’єкт, для якого потрібне явне перетворення значень полів у підтримуваних типах даних. У наведеній нижче таблиці перелічено типи даних у Power Apps і відповідний тип даних JSON, а також спосіб їх перетворення.
Тип даних | Приклади JSON | Опис | Приклад перетворення |
---|---|---|---|
Boolean | { "bool": true } |
Логічне значення – це явний тип у JSON, і його можна безпосередньо перетворити. | логічний( ParseJSON("{ ""bool"": true }").bool ) |
Колір | { "color": "#102030" } { "r": 255, "g": 128, "b": 0, "a": 0.5 } |
У JSON відсутній тип кольору. Значення кольорів можна створювати із цілих чисел RGBA або шістинадцяткових рядків. | ColorValue( ParseJSON( "{ "" color"": ""#102030""" }).color ) With( { uo: ParseJSON( "{ ""r"": 255, ""g"": 128, ""b"": 0, "a"": 0.5 }" ), } RGBA( Value( uo.r ), Value( uo.g ), Value( uo.b ), Value( uo.a ) ) ) |
Грошова одиниця, номер | { "numbervalue": 123.5 } |
Числа представлено безпосередньо в JSON з крапкою ( . ) як десятковий роздільник. | Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue ) |
Дата, дата/час, час | { "start": "2022-05-10" } { "start": "23:12:49.000" } |
У JSON немає типу дати або часу, тому дати й час може бути представлено лише як рядки. Нетипізований об’єкт можна безпосередньо перетворити з рядка у форматі ISO 8601 на дату, час або на дату й час. Для інших форматів спочатку перетворіть поле JSON на текст за допомогою функції Text(), а потім скористайтеся функцією DateValue(), TimeValue() або DateTimeValue(), яка за промовчанням використовуватиме мову параметрів поточного користувача. | DateValue( ParseJSON("{ ""appointment"": ""2022-05-10"" }).appointment ) dateValue( text( parseJSON("{ ""appointment"": "5 травня 2022 р."" }).appointment ) ) |
GUID | { "id": "123e4567-e89b-12d3-a456-426655440000" } |
У JSON відсутній тип даних для GUId, тому їх може бути представлено лише як рядки. | GUID( ParseJSON("{ ""id"": "123e4567-e89b-12d3-a456-426655440000""") }.id ) |
Гіперпосилання, зображення, медіафайли | { "URI": "https://northwindtraders.com/logo.jpg" } |
Ці типи даних є текстовими типами даних, і їх можна перетворити на текст, а потім використовувати в Power Apps. | text( parseJSON("{ ""URI"": "";https://northwindtraders.com/logo.jpg"" }). URI ) |
Вибір | { "status": 1 } { "status": "Closed" } |
Варіанти вибору представлено як локалізовані рядки на основі числа. Функція JSON() серіалізує варіант вибору на свій резервний номер. Не існує прямого перетворення з числа або рядка на варіант вибору, але функції Switch() або If() можна використовувати для текстового або числового значення. | switch( value( parseJSON( "{ ""status""": 1 }" ).status ), 0, status.open, 1, status.closed ) |
Записати | { "field": "value" } |
Не існує прямого перетворення з об’єкта JSON на структуру запису, але окремі поля можна отримати з нетипізованого об’єкта, щоб утворити запис. | { field: Text( ParseJSON( "{ ""field"": "" value"" }" ).field ) } |
Посилання на запис | н/д | Посилання на записи є унікальними для джерел даних, і їх не можна серіалізувати або десеріалізувати. Значення полів, які представляють унікальні ключі, можна використовувати в JSON для визначення записів, які потім можна шукати. | н/д |
Table | [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ] [1, 2, 3] |
JSON може містити масиви, які можна перетворювати на таблиці. Це значення можуть бути масивами записів або масивами значень, які за суттю є таблицями з одним стовпцем. Масиви ParseJSON() можуть бути перетворені лише в таблицю з одним стовпцем нетипізованих об’єктів і можуть використовуватися як такі або перетворюватися на типізовані таблиці записів за допомогою ForAll(). | ForAll( table( parseJSON( " { [""id"": 1, ""name"": ""one"" }, { "id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } ) |
SMS | { "stringField": "this is text" } |
Текст – це явний тип у JSON, і його можна безпосередньо перетворити. | Text( ParseJSON( "{ ""stringField"": ""це текст"" }).stringField ) |
Два параметри | { "available": true } { "available": "Yes" } |
Два варіанти представлено як локалізовані рядки на основі логічного значення. Функція JSON() серіалізує два варіанти для логічного значення. Не існує прямого перетворення з логічного значення, числа або рядка на два варіанти, але функції Switch() або If() можна використовувати для текстового, числового або логічного значення. | Switch( логічний( ParseJSON( "{ ""available""": true }" ).available ), false, Availability.No, true, Availability.Yes ) |
Приклади
Доступ до значень полів
З огляду на наступний рядок JSON у змінної з іменем JsonString
{ "parent": { "child": "text value" }, "number": 567 }
- Наведена нижче формула повертає текст
text value
:Text( ParseJSON( JsonString ).parent.child )
- Наведена нижче формула повертає число
567
:Value( ParseJSON( JsonString ).number )
Якщо ім’я поля складається з неприпустимого імені ідентифікатора, імена полів можна взяти в одинарні лапки.
З огляду на наступний рядок JSON у змінної з іменем JsonString
{ "0": { "child-field": "text value" } }
- Наведена нижче формула повертає текст
text value
:Text( ParseJSON( JsonString ).'0'.'child-field' )
Пусті значення
З огляду на наступний рядок JSON у змінної з іменем JsonString
{ "text": "text value" , "number": 567, "empty": null }
- Спроба доступу до неіснуючих полів повертає значення Blank(). Наведена нижче формула повертає такий результат
true
:IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
- Значення JSON
null
вважаються Blank(). Наведена нижче формула повертає такий результатtrue
:IsBlank( Text( ParseJSON( JsonString ).empty ) )
Прості масиви
З огляду на наступний рядок JSON у змінної з іменем JsonString
{ "array": [1, 2, 3] }
- Доступ до другого числа в таблиці поля масиву нетипізованого об’єкта з одним стовпцем та перетворення на число за допомогою функції Value() повертає
2
:Value( Index( ParseJSON( JsonString ).array, 2 ) )
- Перетворення таблиці нетипізованого об’єкта з одним стовпцем у полі масиву на таблицю чисел з одним стовпцем
{ Value: 1 }, { Value: 2 }, { Value: 3 }
:ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
Масив записів:
З огляду на наступний рядок JSON у змінної з іменем JsonString
{ "array": [
{ "id": 1, "name": "One"},
{ "id": 2, "name": "Two"}
] }
Перетворення на типізовану таблицю записів безпосередньо за допомогою ForAll() можна виконати, скориставшись
ThisRecord.[fieldname]
, щоб отримати доступ до полів нетипізованих об’єктів і перетворити їх на відомі типи:ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
Масив до таблиці
- Перетворення нетипізованого об’єкта на таблицю за допомогою функції Table() призводить до створення таблиці нетипізованих об’єктів з одним стовпцем. Потім доступ до об’єкта має здійснюватися за допомогою (одиного) стовпця
Value
і його має бути перетворено на типи, як описано раніше.
З огляду на наступний рядок JSON у змінної з іменем JsonString
{ "array": [1, 2, 3] }
Table() повертає таблицю з одним стовпцем нетипізованих об’єктів з одностовпцевим значенням для числа в масиві...
Set(untypedTable, Table( ParseJSON( JsonString ).array );
Value( Index(untypedTable, 1).Value.Value )
```
Given the following JSON string in a variable named `JsonString`
```JSON
{ "array": [
{ "id": 1, "name": "One"},
{ "id": 2, "name": "Two"}
] }
Table() повертає таблицю з одним стовпцем нетипізованих об’єктів , яка представляє кожен об’єкт json у масиві.
Set(untypedTable, Table( ParseJSON( JsonString ).array );
Text( Index(untypedTable, 1).Value.name )