Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: Aplicaciones de lienzo Copilot Studio
Aplicaciones controladas por
modelos de Power Platform Funciones de Power Platform
Dataverse Power
Pages
Interpreta una cadena JSON y devuelve un valor dinámico o un valor con tipo específico si se proporciona un tipo.
Importante
- El uso del segundo argumento para ParseJSON convertir en un objeto con tipo es una característica experimental.
- Las características experimentales no se han diseñado para un uso de producción y pueden tener una funcionalidad restringida. Estas características están disponibles antes del lanzamiento oficial para que pueda tener acceso anticipado y proporcionar comentarios. Más información: Comprender las funciones experimentales, de vista previa y retiradas en aplicaciones de lienzo
- El comportamiento que se describe en este artículo solo está disponible cuando la característica experimental Tipos definidos por el usuario en Configuración > Próximas características > Experimental está activada está activada (desactivada de forma predeterminada).
- Sus comentarios son muy valiosos para nosotros. Denos su opinión en los foros de la comunidad de características experimentales de Power Apps.
Description
La ParseJSON función analiza una cadena JSON válida y devuelve un valor dinámico que representa la estructura JSON.
Opcionalmente, use el segundo argumento para convertir el JSON en un objeto con tipo que se pueda usar directamente en las fórmulas Power Fx. Esto hace que el resultado sea más fácil de consumir, ya que ya no se requieren conversiones ni coerciones en el punto de uso. El JSON sin tipo se asigna al tipo con estas reglas:
- Las columnas del tipo que no están presentes en el JSON se rellenan con espacios en blanco.
- Las columnas del JSON que no están presentes en el tipo se omiten.
- Para las columnas que están en el tipo y en el JSON, el valor JSON debe poder ser convertido al tipo.
La ParseJSON función puede devolver errores si el texto no es válido JSON según el formato de notación de objetos JavaScript (JSON) descrito en ECMA-404 e IETF RFC 8259.
Sintaxis
ParseJSON( JSONString [ , Type ] )
- JSONString: requerido. La estructura JSON representada como texto.
- Tipo - opcional. La definición de tipo de Power Fx para la estructura JSON. Sin este argumento, ParseJSON devuelve un valor dinámico; con ella, la función devuelve un valor con tipo específico.
Conversión de valores dinámicos
Sin el segundo argumento, ParseJSON devuelve un valor Dinámico que requiere la 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 | Description | 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 valor dinámico 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 ninguna conversión directa de un objeto JSON a una estructura de registros, pero se pueden recuperar campos individuales del valor dinámico 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. ParseJSON() las matrices solo se pueden convertir en una sola tabla de columnas de valores dinámicos y se pueden usar como tal o convertir en tablas con tipo de registros mediante 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 }
- 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
nullse 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] }
- Obtener acceso al segundo número de la tabla de columna única del campo de matriz de valores dinámicos y convertir en un número mediante Value() devuelve
2:Value( Index( ParseJSON( JsonString ).array, 2 ) ) - Convertir la tabla de una sola columna de valores dinámicos en el campo de matriz, en una sola tabla de columnas
{ Value: 1 }, { Value: 2 }, { Value: 3 }de números :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"}
] }
La conversión a una tabla con tipo de registros directamente con ForAll() se puede realizar mediante
ThisRecord.[fieldname]para acceder a campos dinámicos y convertirlos a tipos específicos:ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
Matriz a tabla
- La conversión de valores dinámicos en una tabla mediante la función Table() da como resultado una tabla de una sola columna de valores dinámicos . 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 valores dinámicos con un valor de columna única para el número de 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 valores dinámicos que representa cada objeto json de la matriz.
Set(untypedTable, Table( ParseJSON( JsonString ).array ) );
Text( Index(untypedTable, 1).Value.name )