Функция ParseJSON

Применимо к: приложениям на основе холста приложениям на основе модели интерфейс командной строки Power Platform

Интерпретирует строку JSON и возвращает нетипизированный объект.

Description

Функция ParseJSON будет анализировать допустимую строку JSON и возвращать нетипизированный объект представляющий структуру JSON.

Функция ParseJSON может возвращать ошибки, если текст не является допустимым JSON в соответствии с форматом нотации объектов JavaScript (JSON), описанным в ECMA-404, а также IETF RFC 8259.

Синтаксис

ParseJSON( JSONString )

  • JSONString — обязательно. Структура JSON представлена в виде текста.

Преобразование типа данных нетипизированного объекта

ParseJSON возвращает нетипизированный объект, который требует явного преобразования значений полей в поддерживаемые типы данных. В следующей таблице перечислены типы данных в Power Apps, соответствующий тип данных JSON и способ его преобразования.

Тип данных Примеры JSON Description Пример преобразования
Логический { "bool": true } Логическое значение — это явный тип в JSON, который можно преобразовать напрямую. Boolean( ParseJSON("{ ""bool"": true }").bool )
Color { "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 в текст с помощью функции Текст(), а затем используйте функцию 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( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed )
Запись { "field": "value" } Нет прямого преобразования объекта JSON в структуру записи, но отдельные поля можно получить из нетипизированного объекта для формирования записи. { поле: Text( ParseJSON( "{ ""поле"": ""значение"" }" ).поле ) }
Ссылка на запись н/д Ссылки на записи уникальны для источников данных и не могут быть сериализованы или десериализованы. Значения полей, представляющие уникальные ключи, могут использоваться в JSON для идентификации записей, которые затем можно искать. н/д
Таблицу [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
JSON может содержать массивы, которые можно преобразовать в таблицы. Эти значения могут быть массивами записей или массивами значений, которые фактически являются таблицами с одним столбцом. Массивы ParseJSON() могут быть преобразованы только в таблицу нетипизированных объектов с одним столбцом и может использоваться как таковой или преобразовываться в типизированные таблицы записей с помощью значения ForAll(). ForAll( Table( ParseJSON( "[ { ""id"": 1, ""имя"": ""один"" }, { ""id"": 2, ""имя"": ""два"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } )
Текст { "stringField": "this is text" } Текст — это явный тип в JSON, который можно преобразовать напрямую. Text( ParseJSON( "{ ""stringField"": ""это текст"" }").stringField )
Два параметра { "available": true }
{ "available": "Yes" }
Два варианты представлены в виде локализованных строк на основе логического значения. Функция JSON() сериализует два параметра в ее логическое значение. Нет прямого преобразования логического значения, числа или строки в два варианта, но Выключатель() или функции Если() могут использоваться для текстового, числового или логического значения. 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. Попытка доступа к несуществующим полям возвращает Пустое значение(). Следующая формула возвращает значение true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. Значения JSON null считаются Пустыми. Следующая формула возвращает значение 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() возвращает одностолбцовую таблицу нетипизированных объектов с одним столбцом Value для числа в массиве...

 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 )