Функция ParseJSON
Применимо к: Приложениям Canvas Приложениям на основе моделей Power Pages Power Platform CLI
Интерпретирует строку 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, который можно преобразовать напрямую. | логический( ParseJSON("{ ""bool"": true }").bool ) |
Color | { "color": "#102030" } { "r": 255, "g": 128, "b": 0, "a": 0.5 } |
В JSON нет типа цвета. Значения цвета могут быть созданы из целых чисел RGBA или шестнадцатеричных строк. | ColorValue( ParseJSON( "{ ""color"": ""#102030"" }" ).color ) С( { uo: ParseJSON( "{ ""r"": 255, ""g"": 128, ""b"": 0, ""a"": 0.5 }" ) }, RGBA( Значение( uo.r ), Значение( uo.g ), Значение( uo.b ), Значение( uo.a ) ) ) |
Номер валюты | { "numbervalue": 123.5 } |
Числа представлены непосредственно в формате JSON с точкой ( . ) в качестве десятичного разделителя. | Значение( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue ) |
Дата, время и дата, время | { "start": "2022-05-10" } { "start": "23:12:49.000" } |
JSON не имеет типа даты или времени, поэтому может представлять даты и время только в виде строк. Нетипизированный объект может быть напрямую преобразован из строки в формате ISO 8601 в дату, время или дату и время. Для других форматов сначала преобразуйте поле JSON в текст с помощью функции Текст(), а затем используйте функцию DateValue(), TimeValue() или DateTimeValue(), которая по умолчанию будет использовать язык настроек текущего пользователя. | DateValue( ParseJSON("{ ""назначение"": ""2022-05-10"" }").назначение ) 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( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Статус.Открыт, 1, Статус.Закрыт ) |
Запись | { "field": "value" } |
Нет прямого преобразования объекта JSON в структуру записи, но отдельные поля можно получить из нетипизированного объекта для формирования записи. | { поле: Текст( ParseJSON( "{ ""поле"": ""значение"" }" ).поле ) } |
Ссылка на запись | н/д | Ссылки на записи уникальны для источников данных и не могут быть сериализованы или десериализованы. Значения полей, представляющие уникальные ключи, могут использоваться в JSON для идентификации записей, которые затем можно искать. | н/д |
Таблицу | [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ] [1, 2, 3] |
JSON может содержать массивы, которые можно преобразовать в таблицы. Эти значения могут быть массивами записей или массивами значений, которые фактически являются таблицами с одним столбцом. Массивы ParseJSON() могут быть преобразованы только в таблицу с одним столбцом нетипизированных объектов и могут использоваться как таковые или преобразовываться в типизированные таблицы записей с помощью ForAll(). | ForAll( Таблица( ParseJSON( "[ { ""id"": 1, ""name"": ""один"" }, { ""id"": 2, ""name"": ""два"" } ]" ) ), { id: Значение(ThisRecord.Value.id), имя: Текст(ThisRecord.Value.name) } ) |
Текст | { "stringField": "this is text" } |
Текст — это явный тип в JSON, который можно преобразовать напрямую. | Текст( ParseJSON( "{ ""stringField"": ""это текст"" }").stringField ) |
Два параметра | { "available": true } { "available": "Yes" } |
Два варианты представлены в виде локализованных строк на основе логического значения. Функция JSON() сериализует два параметра в ее логическое значение. Нет прямого преобразования логического значения, числа или строки в два варианта, но Выключатель() или функции Если() могут использоваться для текстового, числового или логического значения. | Switch( логический( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Доступность.Да ) |
Примеры
Доступ к значениям полей
Учитывая следующую строку 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 }
- Попытка доступа к несуществующим полям возвращает Пустое значение(). Следующая формула возвращает значение
true
:IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
- Значения JSON
null
считаются Пустыми. Следующая формула возвращает значение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() возвращает таблицу из одного столбца нетипизированных объектов с одним столбцом 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 )