Función ParseJSON
Se aplica a: Aplicaciones de Canvas Aplicaciones basadas en modelos Power Pages 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 – Obligatorio. 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. | booleano( 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 ) Con( { uo: ParseJSON( "{ ""r"": 255, ""g"": 128, ""b"": 0, ""a"": 0.5 }" ) }, RGBA( Valor( uo.r ), Valor( uo.g ), Valor( uo.b ), Valor( uo.a ) ) ) |
Moneda, número | { "numbervalue": 123.5 } |
Los números se representan directamente en JSON con un punto ( . ) como separador decimal. | Valor( ParseJSON("{ ""valornumérico"": 123.5 }").valornumérico ) |
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("{ ""cita"": ""2022-05-10"" }").cita ) DateValue( Text( ParseJSON("{ ""cita"": ""5 de mayo de 2022"" }").cita ) ) |
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. | Texto( 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( Valor( ParseJSON( "{ ""estado"": 1 }" ).estado ), 0, Estado.Abierto, 1, Estado.Cerrado ) |
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. | { campo: Texto( ParseJSON( "{ ""campo"": ""valor"" }" ).campo ) } |
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 se pueden usar como tales o convertir en tablas de registros tipificadas usando ForAll(). | ForAll( Tabla( ParseJSON( "[ { ""id"": 1, ""nombre"": ""uno"" }, { ""id"": 2, ""nombre"": ""dos"" } ]" ) ), { id: Valor(ThisRecord.Value.id), nombre: Texto(ThisRecord.Value.name) } ) |
Text | { "stringField": "this is text" } |
Text es un tipo explícito en JSON y se puede convertir directamente. | Texto( ParseJSON( "{ ""stringField"": ""esto es texto"" }").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( booleano( ParseJSON( "{ ""available"": true }" ).available ), falso, Availability.No, verdadero, Disponibilidad.Sí ) |
Ejemplos
Acceso a valores de campos
Dada la siguiente cadena JSON en una variable llamada JsonString
{ "parent": { "child": "text value" }, "number": 567 }
- La fórmula siguiente devuelve el texto
text value
:Text( ParseJSON( JsonString ).parent.child )
- 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" } }
- 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 }
- El intento de acceder a campos no existentes devuelve Blank(). La fórmula siguiente devuelve
true
:IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
- Los valores JSON
null
se consideran Blank(). La fórmula siguiente devuelvetrue
:IsBlank( Text( ParseJSON( JsonString ).empty ) )
Matrices simples
Dada la siguiente cadena JSON en una variable llamada JsonString
{ "array": [1, 2, 3] }
- 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 ) )
- 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"}
] }
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
- 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 de una sola columna para el número 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 )