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


ParseJSON функция

Применимо к: Приложения На основе холста Приложения Copilot Studio, управляемые моделью приложения Power Platform CLI Dataverse, функции Power Pages

Интерпретирует строку JSON и возвращает динамическое значение или определенное типизированное значение, если указан тип.

Внимание!

Description

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

При необходимости используйте второй аргумент для преобразования JSON в типизированный объект, который можно напрямую использовать в формулах Power Fx. Это упрощает восприятие результата, так как больше не требуются преобразования и принуждения в точке использования. Нетипизированный JSON сопоставляется с типом с помощью следующих правил:

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

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

Синтаксис

ParseJSON( JSONString [ , Type ] )

  • JSONString – обязательно. Структура JSON представлена в виде текста.
  • Type — необязательный параметр. Определение типа Power Fx для структуры JSON. Без этого аргумента ParseJSON возвращает динамическое значение. При этом функция возвращает определенное типизированное значение.

Преобразование динамических значений

Без второго аргумента возвращает динамическое значение, 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( "{ "цвет"": """"#102030"" }" ).color )
With( { uo: ( "{ ""r"": ParseJSON255, ""g": 128, "b": 0, "a"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 в текст с помощью функции Текст(), а затем используйте функцию DateValue(), TimeValue() или DateTimeValue(), которая по умолчанию будет использовать язык настроек текущего пользователя. DateValue( ParseJSON("{ "встреча"": """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-42665540000"" }").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( "{ "поле"": ""value"" }" ).field ) }
Ссылка на запись н/д Ссылки на записи уникальны для источников данных и не могут быть сериализованы или десериализованы. Значения полей, представляющие уникальные ключи, могут использоваться в JSON для идентификации записей, которые затем можно искать. н/д
Таблицу [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
JSON может содержать массивы, которые можно преобразовать в таблицы. Эти значения могут быть массивами записей или массивами значений, которые фактически являются таблицами с одним столбцом. ParseJSON() массивы могут быть преобразованы только в одну таблицу столбцов динамических значений и могут использоваться как такие или преобразованные в типизированные таблицы записей с помощью ForAll(). ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name": ""one"" }, { "id": 2, "name"name": ""two"} ]" ) ), { 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( ( "{"available": ParseJSONtrue }" (доступно ).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. Доступ ко второму числу в таблице одного столбца массива динамических значений и преобразованию в число, используя значение() возвращает 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 )