Función ParseJSON

Se aplica a: Aplicaciones de lienzo Aplicaciones basadas en modelo Power Platform CLI

Interpreta una cadena JSON y devuelve un objeto sin tipo.

Description

La función ParseJSON analizará una cadena JSON válida y devolverá un objeto sin tipo que representa la estructura JSON.

La función ParseJSON puede devolver errores si el texto no es JSON válido, de acuerdo con el formato de notación de objetos JavaScript (JSON) descrito en ECMA-404 e IETF RFC 8259.

Sintaxis

ParseJSON( JSONString )

  • JSONString: requerido. La estructura JSON representada como texto.

Conversión de tipo de datos de objeto Untyped

ParseJSON devuelve un objeto sin tipo que requiere una conversión explícita de valores de campo en tipos de datos admitidos. La siguiente tabla enumera los tipos de datos en Power Apps, un tipo de datos JSON correspondiente y cómo convertirlo.

Tipo de datos Ejemplos de JSON Descripción Conversión de ejemplo
Booleana { "bool": true } Boolean es un tipo explícito en JSON y se puede convertir directamente. Boolean( ParseJSON("{ ""bool"": true }").bool )
Color { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
No hay tipo de color en JSON. Los valores de color se pueden crear a partir de enteros RGBA o cadenas hexadecimales. 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 ) ) )
Moneda, número { "numbervalue": 123.5 } Los números se representan directamente en JSON con un punto ( . ) como separador decimal. Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue )
Fecha, Fecha y hora, Hora { "start": "2022-05-10" }
{ "start": "23:12:49.000" }
JSON no tiene un tipo de fecha u hora, por lo que solo puede representar fechas y horas como cadenas. Un objeto sin tipo se puede convertir directamente de una cadena en formato ISO 8601 a una fecha, hora o fecha y hora. Para otros formatos, primero convierta el campo JSON a texto usando la función Text() y luego use la función DateValue(), TimeValue() o DateTimeValue() que por defecto utilizará el idioma de la configuración actual del usuario. DateValue( ParseJSON("{ ""appointment"": ""2022-05-10"" }").appointment )
DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment ) )
GUID { "id": "123e4567-e89b-12d3-a456-426655440000" } JSON no tiene un tipo de datos para los GUID, por lo que solo se pueden representar como cadenas. GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id )
Hipervínculo, Imagen, Medios { "URI": "https://northwindtraders.com/logo.jpg" } Estos tipos de datos son tipos de datos de texto y pueden convertirse en texto y luego usarse en Power Apps. Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }").URI )
Opción { "status": 1 }
{ "status": "Closed" }
Las opciones se presentan como cadenas localizadas, respaldadas por un número. La función JSON() serializa una opción a su número de respaldo. No hay una conversión directa de número o cadena a una opción, pero las funciones Switch() o If() se pueden utilizar en el valor de texto o número. Switch( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed )
Grabar { "field": "value" } No hay una conversión directa de un objeto JSON a una estructura de registro, pero los campos individuales se pueden recuperar del objeto sin tipo para formar un registro. { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) }
Referencia de registro n/d Las referencias de registros son exclusivas de los orígenes de datos y no se pueden serializar ni deserializar. Los valores de campo que representan claves únicas podrían usarse en JSON para identificar registros que luego se pueden buscar. n/d
Table [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
JSON puede contener matrices, que se pueden convertir en tablas. Estos valores pueden ser matrices de registros o matrices de valores que son efectivamente tablas de una sola columna. Las matrices ParseJSON() solo se pueden convertir en una tabla de una sola columna de objetos sin tipo, y pueden usarse como tales o convertirse en tablas de registros con tipo usando ForAll(). ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } )
Text { "stringField": "this is text" } Text es un tipo explícito en JSON y se puede convertir directamente. Text( ParseJSON( "{ ""stringField"": ""this is text"" }").stringField )
Dos opciones { "available": true }
{ "available": "Yes" }
Dos opciones se presentan como cadenas localizadas, respaldadas por un booleano. La función JSON() serializa dos opciones a su valor booleano. No hay una conversión directa de booleano, número o cadena a dos opciones, pero las funciones Switch() o If() se pueden utilizar en el texto, el número o el valor booleano. Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes )

Ejemplos

Acceso a valores de campos

Dada la siguiente cadena JSON en una variable llamada JsonString

{ "parent": { "child": "text value" }, "number": 567 }
  1. La fórmula siguiente devuelve el texto text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. La fórmula siguiente devuelve el número 567:
    Value( ParseJSON( JsonString ).number )
    

En caso de que el nombre de un campo consista en un nombre de identificador no válido, puede poner los nombres de los campos entre comillas simples. Dada la siguiente cadena JSON en una variable llamada JsonString

{ "0": { "child-field": "text value" } }
  1. La fórmula siguiente devuelve el texto text value:
    Text( ParseJSON( JsonString ).'0'.'child-field' )
    

Valores en blanco

Dada la siguiente cadena JSON en una variable llamada JsonString

{ "text": "text value" , "number": 567, "empty": null }
  1. El intento de acceder a campos no existentes devuelve Blank(). La fórmula siguiente devuelve true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. Los valores JSON null se consideran Blank(). La fórmula siguiente devuelve true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Matrices simples

Dada la siguiente cadena JSON en una variable llamada JsonString

{ "array": [1, 2, 3] }
  1. Acceder al segundo número de la tabla de una sola columna del campo de matriz de objeto sin tipo y convertir a un número usando Value() devuelve 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Convertir la tabla de una sola columna de objeto sin tipo en el campo de matriz, a una tabla de números de una sola columna { Value: 1 }, { Value: 2 }, { Value: 3 }:
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

Matrices de registros

Dada la siguiente cadena JSON en una variable llamada JsonString

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. Convertir a una tabla de registros con tipo directamente con ForAll() se puede hacer usando ThisRecord.[fieldname] para acceder a campos de objeto sin tipo y convertirlos en tipos conocidos:

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

Matriz a tabla

  1. Cuando se convierte un objeto sin tipo a una tabla usando la función Table() da como resultado una tabla de una sola columna de objetos sin tipo. Se debe entonces acceder al objeto usando la columna Value (única) y convertirlo en tipos como se explicó anteriormente.

Dada la siguiente cadena JSON en una variable llamada JsonString

{ "array": [1, 2, 3] }

Table() devuelve una tabla de una sola columna de objetos sin tipo con un valor para número columna única en la matriz...

 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() devuelve una tabla de una sola columna de objetos sin tipo que representa cada objeto json en la matriz.

  Set(untypedTable, Table( ParseJSON( JsonString ).array );
  
  Text( Index(untypedTable, 1).Value.name )