Share via


Función JSON

Se aplica a: Aplicaciones de lienzo Aplicaciones basadas en modelos

Genera una cadena de texto JSON para una tabla, un registro o un valor.

Descripción

La función JSON devuelve la representación de notación de objetos JavaScript (JSON) de una estructura de datos como texto, de modo que sea adecuada para almacenar o transmitir a través de una red. [ECMA-404] (https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf e IETF RFC 8259 describen el formato, que es ampliamente utilizado por JavaScript y otros lenguajes de programación.

Las aplicaciones de lienzo admiten los tipos de datos de esta tabla con detalles sobre su representación de texto:

Tipo de datos Descripción Ejemplo de resultado
Booleano true o false. true
Color Cadena que contiene la representación hexadecimal de 8 dígitos para el color. Esta representación usa el formato #rrggbbaa, donde rr es el componente rojo, gg es el verde, bb es el azul y aa es el canal alfa. Para el canal alfa, 00 es totalmente transparente y ff es totalmente opaco. Puede pasar la cadena a la función ColorValue. "#102030ff"
Divisa Número que usa el separador decimal apropiado para el idioma del usuario. Se usa la notación científica si es necesario. 1.345
Fecha Cadena que contiene la fecha en formato ISO 8601 aaaa-mm-dd. "2019-03-31"
Fecha y hora Cadena que contiene una fecha/hora ISO 8601. Los valores de fecha/hora están en UTC, como indica la "Z" final. "2019-03-31T22:32:06.822Z"
GUID Cadena que contiene el valor GUID. Las letras son minúsculas. "751b58ac-380e-4a04-a925-9f375995cc40"
Imagen, medios Si se especifica JSONFormat.IncludeBinaryData, los archivos multimedia se codifican en una cadena. Las referencias web que usan el esquema de URL http: o https: no se modifican. Las referencias a datos binarios en memoria se codifican con el formato "data:mimetype;base64,...". Los datos en memoria incluyen imágenes que los usuarios capturan mediante el uso del control Camera y cualquier otra referencia con los esquemas URL appres: y blob:. "data:image/jpeg;base64,/9j/4AA..."
Número Número que usa el separador decimal apropiado para el idioma del usuario. Se usa la notación científica si es necesario. 1.345
Conjunto de opciones Valor numérico de la elección, no la etiqueta que se usa para mostrar. Se usa el valor numérico porque es independiente del idioma. 1001
Hora Cadena que contiene un formato ISO 8601 hh: mm: ss.fff. "23:12:49.000"
Registro Lista delimitada por comas, entre { y }, de los campos y sus valores. Esta notación se parece a la de los registros en aplicaciones de lienzo, pero el nombre siempre está entre comillas dobles. Este formato no admite registros que se basan en relaciones de varios a uno. { "First Name": "Fred", "Age": 21 }
Table Lista delimitada por comas, entre [ y ], de registros. Este formato no admite tablas que se basan en relaciones de uno a varios. Utilice la opción JSONFormat.FlattenValueTables para eliminar el registro de tablas de una sola columna con la columna denominada Valor. [ { "First Name": "Fred", "Age": 21 }, { "First Name": "Jean", "Age": 20 } ]
Dos opciones Valor booleano de la opción de dos, true o false, no la etiqueta que se usa para mostrar. Se usa el valor booleano porque es independiente del idioma. false
Hipervínculo, Texto Cadena entre comillas dobles. La función escapa las comillas dobles incrustadas con una barra diagonal inversa, reemplaza las nuevas líneas con "\n" y realiza otros reemplazos de JavaScript estándar. "This is a string."

Especifique el argumento opcional Formato para controlar cómo de legible es el resultado y cómo se manejan los tipos de datos binarios y no compatibles. De forma predeterminada, la salida es lo más compacta posible, sin espacios innecesarios o líneas nuevas, y no se permiten tipos de datos y datos binarios no compatibles. Puede combinar varios formatos si especifica el operador &.

Enumeración JSONFormat Description
JSONFormat.Compact Predeterminado. El resultado es lo más compacto posible sin espacios añadidos ni líneas nuevas.
JSONFormat.FlattenValueTables Como tabla de valores, la notación [1,2,3] da como resultado una tabla que contiene registros donde cada registro tiene una única columna valor. En JSON, esa misma notación representa una matriz de tres números. Para facilitar la interoperabilidad entre los dos, esta opción aplana una tabla de valores Power Fx a una matriz compatible con JSON en lugar de una matriz de registros.
JSONFormat.IndentFour Para mejorar la legibilidad, la salida contiene una nueva línea para cada columna y nivel de anidación y utiliza cuatro espacios para cada nivel de sangría.
JSONFormat.IncludeBinaryData El resultado incluye columnas de imagen, vídeo y clip de audio. Este formato puede aumentar drásticamente el tamaño del resultado y degradar el rendimiento de su aplicación.
JSONFormat.IgnoreBinaryData El resultado no incluye columnas de imagen, vídeo o clip de audio. Si no especifica JSONFormat.IncludeBinaryData ni JSONFormat.IgnoreBinaryData, la función produce un error si encuentra datos binarios.
JSONFormat.IgnoreUnsupportedTypes Los tipos de datos no admitidos están permitidos, pero el resultado no los incluirá. Por defecto, los tipos de datos no compatibles producen un error.

Utilice las funciones ShowColumns y DropColumns para controlar qué datos incluye el resultado y para eliminar tipos de datos no compatibles.

Porque JSON puede hacer un uso intensivo de memoria y proceso, puede usar esta función solo en funciones de comportamiento. Puede capturar el resultado de JSON en una variable, que luego puede usar en el flujo de datos.

Si una columna tiene un nombre para mostrar y un nombre lógico, el resultado contiene el nombre lógico. Los nombres para mostrar reflejan el idioma del usuario de la aplicación y, por lo tanto, no son apropiados para la transferencia de datos a un servicio común.

Sintaxis

JSON( DataStructure [, Format ] )

  • DataStructure: requerido. La estructura de datos para convertir a JSON. Se admiten tablas, registros y valores primitivos, anidados arbitrariamente.
  • Format: opcional. Valor de enumeración JSONFormat. El valor predeterminado es JSONFormat.Compact, que no agrega saltos de línea ni espacios y bloquea los datos binarios y columnas no compatibles.

Ejemplos

Datos jerárquicos

  1. Inserte un control Button y establezca su propiedad OnSelect en esta fórmula.

    ClearCollect( CityPopulations,
        { City: "London",    Country: "United Kingdom", Population: 8615000 },
        { City: "Berlin",    Country: "Germany",        Population: 3562000 },
        { City: "Madrid",    Country: "Spain",          Population: 3165000 },
        { City: "Hamburg",   Country: "Germany",        Population: 1760000 },
        { City: "Barcelona", Country: "Spain",          Population: 1602000 },
        { City: "Munich",    Country: "Germany",        Population: 1494000 }
    );
    ClearCollect( CitiesByCountry, GroupBy( CityPopulations, "Country", "Cities" ) )
    
  2. Seleccione el botón mientras mantiene presionada la tecla Alt.

    La colección CitiesByCountry se crea con esta estructura de datos, que puede mostrar seleccionando Colecciones en el menú Archivo y luego seleccionando el nombre de la colección.

    Colección CitiesByCountry.

    También puede mostrar esta colección seleccionando Configuración>Próximas funciones>Habilitar vista de resultados de la barra de fórmulas, seleccionando el nombre de la colección en la barra de fórmulas y luego seleccionando la flecha abajo junto al nombre de la colección debajo de la barra de fórmulas.

    Colección en la vista de resultados de la barra de fórmulas.

  3. Inserte otro botón y establezca su propiedad OnSelect en esta fórmula:

    Set( CitiesByCountryJSON, JSON( CitiesByCountry ) )
    

    Esta fórmula establece la variable global CitiesByCountryJSON en la representación JSON para CitiesByCountry.

  4. Seleccione el botón mientras mantiene presionada la tecla Alt.

  5. Inserte un control Label y establezca su propiedad Text en esta variable.

    CitiesByCountryJSON
    

    La etiqueta muestra este resultado, todo en una sola línea sin espacios, adecuado para la transmisión a través de una red:

    [
      {
        "Cities": [{ "City": "London", "Population": 8615000 }],
        "Country": "United Kingdom"
      },
      {
        "Cities": [
          { "City": "Berlin", "Population": 3562000 },
          { "City": "Hamburg", "Population": 1760000 },
          { "City": "Munich", "Population": 1494000 }
        ],
        "Country": "Germany"
      },
      {
        "Cities": [
          { "City": "Madrid", "Population": 3165000 },
          { "City": "Barcelona", "Population": 1602000 }
        ],
        "Country": "Spain"
      }
    ]
    
  6. Cambie la fórmula del segundo botón para que la salida sea más legible.

    Set( CitiesByCountryJSON, JSON(CitiesByCountry, JSONFormat.IndentFour ))
    
  7. Seleccione el segundo botón mientras mantiene presionada la tecla Alt.

    La etiqueta muestra el resultado más legible.

    [
      {
        "Cities": [
          {
            "City": "London",
            "Population": 8615000
          }
        ],
        "Country": "United Kingdom"
      },
      {
        "Cities": [
          {
            "City": "Berlin",
            "Population": 3562000
          },
          {
            "City": "Hamburg",
            "Population": 1760000
          },
          {
            "City": "Munich",
            "Population": 1494000
          }
        ],
        "Country": "Germany"
      },
      {
        "Cities": [
          {
            "City": "Madrid",
            "Population": 3165000
          },
          {
            "City": "Barcelona",
            "Population": 1602000
          }
        ],
        "Country": "Spain"
      }
    ]
    

Imágenes y medios en base64

  1. Agregue un control Image.

    Este control trae consigo SampleImage.

  2. Agregue un control Button y establezca su propiedad OnSelect en esta fórmula.

    Set( ImageJSON, JSON( SampleImage, JSONFormat.IncludeBinaryData ) )
    
  3. Seleccione el botón mientras mantiene presionada la tecla Alt.

  4. Agregue una etiqueta y establezca su propiedad Text en esta variable.

    ImageJSON
    
  5. Cambie el tamaño del control y reduzca el tamaño de fuente según sea necesario para mostrar la mayor parte del resultado.

    La etiqueta muestra la cadena de texto que la función JSON ha capturado.

    "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxzdmcgdmVyc2lvbj0iMS4xIg0KCSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczphPSJodHRwOi8vbnMuYWRvYmUuY29tL0Fkb2JlU1ZHVmlld2VyRXh0ZW5zaW9ucy8zLjAvIg0KCSB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjI3MHB4IiBoZWlnaHQ9IjI3MHB4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNzAgMjcwIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCgk8ZyBjbGFzcz0ic3QwIj4NCgkJPHJlY3QgeT0iMC43IiBmaWxsPSIjRTlFOUU5IiB3aWR0aD0iMjY5IiBoZWlnaHQ9IjI2OS4zIi8+DQoJCTxwb2x5Z29uIGZpbGw9IiNDQkNCQ0EiIHBvaW50cz0iMjc3LjksMTg3LjEgMjQ1LDE0My40IDE4OC42LDIwMi44IDc1LDgwLjUgLTQuMSwxNjUuMyAtNC4xLDI3MiAyNzcuOSwyNzIiLz4NCgkJPGVsbGlwc2UgZmlsbD0iI0NCQ0JDQSIgY3g9IjIwMi40IiBjeT0iODQuMSIgcng9IjI0LjQiIHJ5PSIyNC4zIi8+DQoJPC9nPg0KPC9zdmc+"
    

Tablas de valores

Esta fórmula:

JSON( [1,2,3] )

produce la cadena de texto [{"Valor":1},{"Valor":2},{"Valor":3}].

La misma fórmula con la opción JSONFormat.FlattenValueTables:

JSON( [1,2,3], JSONFormat.FlattenValueTables )

produce la cadena de texto [1,2,3].

Tenga en cuenta que la opción FlattenValueTables no tiene ningún impacto cuando se utiliza JSON con las colecciones CityPopulations o CitiesByCountry ya que estas tablas no son Tablas de valores. Una tabla de Valor tiene una sola columna y debe llamarse "Valor".