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


Функція ParseJSON

Застосовується до: програм Canvas Програм Power Platform CLI на основі моделі

Інтерпретує рядок 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, і його можна безпосередньо перетворити. 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.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 на структуру запису, але окремі поля можна отримати з нетипізованого об’єкта, щоб утворити запис. { 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"": ""this is text"" }").stringField )
Два параметри { "available": true }
{ "available": "Yes" }
Два варіанти представлено як локалізовані рядки на основі логічного значення. Функція JSON() серіалізує два варіанти для логічного значення. Не існує прямого перетворення з логічного значення, числа або рядка на два варіанти, але функції Switch() або If() можна використовувати для текстового, числового або логічного значення. Switch( Boolean( ParseJSON( "{ ""available"": 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 )