Поділитися через


ParseJSON функція

Застосовується до: Програми Canvas Copilot Studio Model-driven apps Power Platform CLI Dataverse functions Power Pages

Інтерпретує рядок JSON і повертає динамічне значення або певне введене значення, якщо вказано тип.

Важливо

Опис

Функція ParseJSON аналізує припустимий рядок JSON і повертає динамічне значення, що позначає структуру JSON.

За бажанням використовуйте другий аргумент, щоб перетворити JSON на типізований об’єкт, який можна безпосередньо використовувати у Power Fx формулах. Це полегшує споживання результату, оскільки перетворення та примус на місці використання більше не потрібні. Нетипізований JSON зіставляється з типом за такими правилами:

  • Стовпці типу, яких немає в JSON, заповнюються пробілами.
  • Стовпці в JSON, яких немає в типі, ігноруються.
  • Стовпці, які є одночасно в типі та JSON, значення JSON має бути примусовим до типу.

Функція ParseJSON може повертати помилки, якщо текст неприпустимий JSON відповідно до формату JavaScript Object Notation (JSON), описаного в ECMA-404 і IETF RFC 8259.

Синтаксис

ParseJSON( JSONString [ , Тип ] )

  • JSONString – Обов’язковий. Структура JSON, представлена як текст.
  • Тип- Необов’язковий. Визначення Power Fx типу для структури JSON. Без цього аргументу ParseJSON повертається динамічне значення; разом із ним функція повертає певне введене значення.

Перетворення динамічних значень

Без другого аргументу повертається динамічне значення, ParseJSON яке вимагає явного перетворення значень полів у підтримуваних типах даних. У наведеній нижче таблиці перелічено типи даних у Power Apps і відповідний тип даних JSON, а також спосіб їх перетворення.

Тип даних Приклади JSON Опис Приклад перетворення
логічний { "bool": true } Логічне значення – це явний тип у JSON, і його можна безпосередньо перетворити. Boolean( 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.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"": ""May 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 на структуру записів, але окремі поля можна отримати з динамічного значення, щоб сформувати запис. { поле: Text( ParseJSON( "{ ""поле"": ""значення"" }" ).поле ) }
Посилання на запис н/д Посилання на записи є унікальними для джерел даних, і їх не можна серіалізувати або десеріалізувати. Значення полів, які представляють унікальні ключі, можна використовувати в 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"": ""this is text"" }").stringField )
Два параметри { "available": true }
{ "available": "Yes" }
Два варіанти представлено як локалізовані рядки на основі логічного значення. Функція JSON() серіалізує два варіанти для логічного значення. Не існує прямого перетворення з логічного значення, числа або рядка на два варіанти, але функції Switch() або If() можна використовувати для текстового, числового або логічного значення. Switch( Boolean( ParseJSON( "{ ""доступно"": true }" ).available ), false, Availability.No, true, Availability.Yes )

Приклади

Доступ до значень полів

З огляду на наступний рядок JSON у змінної з іменем JsonString

{ "parent": { "child": "text value" }, "number": 567 }
  1. Наведена нижче формула повертає текст text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. Наведена нижче формула повертає число 567:
    Value( ParseJSON( JsonString ).number )
    

Якщо ім’я поля складається з неприпустимого імені ідентифікатора, імена полів можна взяти в одинарні лапки. З огляду на наступний рядок JSON у змінної з іменем JsonString

{ "0": { "child-field": "text value" } }
  1. Наведена нижче формула повертає текст text value:
    Text( ParseJSON( JsonString ).'0'.'child-field' )
    

Пусті значення

З огляду на наступний рядок JSON у змінної з іменем JsonString

{ "text": "text value" , "number": 567, "empty": null }
  1. Спроба доступу до неіснуючих полів повертає значення Blank(). Наведена нижче формула повертає такий результат true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. Значення JSON null вважаються Blank(). Наведена нижче формула повертає такий результат true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Прості масиви

З огляду на наступний рядок JSON у змінної з іменем JsonString

{ "array": [1, 2, 3] }
  1. Доступ до другого числа в таблиці з одним стовпцем поля масиву динамічних значень і перетворення на число за допомогою Value() повертає 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Перетворення таблиці з одним стовпцем динамічних значень у полі масиву на таблицю чисел { Value: 1 }, { Value: 2 }, { Value: 3 }в одному стовпці:
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

Масив записів:

З огляду на наступний рядок JSON у змінної з іменем JsonString

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. Перетворення на введену таблицю записів безпосередньо з ForAll() можна виконати за допомогою ThisRecord.[fieldname] доступу до динамічних полів і перетворення їх на певні типи:

    ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
    

Масив до таблиці

  1. Перетворення динамічних значень на таблицю за допомогою функції 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 )