Compartir por


Función de JSON

Aplícase a: Aplicacións de lenzo Aplicacións baseadas en modelos Power Pages

Xera unha cadea de texto JSON para unha táboa, un rexistro ou un valor.

Descripción

A función JSON devolve a representación de notación de obxectos de JavaScript (JSON) dunha estrutura de datos como texto para que sexa adecuada para almacenar ou transmitir a través dunha rede. [ECMA-404](https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf e IETF RFC 8259 describen o formato, que é moi utilizado por JavaScript e outras linguaxes de programación.

As aplicacións de lenzo admiten tipos de datos que esta táboa enumera con detalles sobre a súa representación de texto:

Tipo de datos Descripción Exemplo de resultado
Booleano true ou false. true
Color Cadea que contén a representación hexadecimal de 8 díxitos para a cor. Esta representación leva o formato #rrggbbaa, onde rr é o compoñente vermello, gg é o verde, bb é o azul e aa é a canle alfa. Para a canle alfa, 00 é totalmente transparente e ff é totalmente opaco. Pode pasar a cadea á función ColorValue. "#102030ff"
Moeda Número que usa o separador decimal adecuado para o idioma do usuario. Se é necesario úsase unha notación científica. 1.345
Data Cadea que contén a data no formato ISO 8601 aaaa-mm-dd. "2019-03-31"
Data e hora Cadea que contén unha data e hora ISO 8601. Os valores de data e hora están en UTC, como indica o "Z" final. "2019-03-31T22:32:06.822Z"
GUID Cadea que contén o valor GUID. As letras son minúsculas. "751b58ac-380e-4a04-a925-9f375995cc40"
Imaxe, elemento multimedia Se se especifica JSONFormat.IncludeBinaryData , os ficheiros multimedia codificaranse nunha cadea. As referencias web que usan o esquema URL http: ou https: non se modifican. As referencias a datos binarios na memoria codifícanse co formato "data:mimetype;base64,...". Os datos na memoria inclúen imaxes que os usuarios capturan usando o control de Cámara e calquera outra referencia cos esquemas de URL appres: e blob:. "data:image/jpeg;base64,/9j/4AA..."
Número Número que usa o separador decimal adecuado para o idioma do usuario. Se é necesario úsase unha notación científica. 1.345
Conxunto de opcións Valor numérico da elección, non a etiqueta que se usa para mostrar. O valor numérico úsase porque é independente do idioma. 1001
Hora Cadea que contén un formato de hh: mm:ss.fff ISO 8601. "23:12:49.000"
Rexistro Lista delimitada por comas, entre {e}, de campos e os seus valores. Esta notación aseméllase á dos rexistros en aplicacións de lenzo, pero o nome sempre está entre comiñas dobres. Este formato non admite rexistros baseados en relacións de un a varios. { "First Name": "Fred", "Age": 21 }
Table Lista delimitada por comas entre [e], de rexistros. Este formato non admite táboas baseadas en relacións de un a varios. Use a opción JSONFormat.FlattenValueTables para eliminar o rexistro das táboas dunha soa columna coa columna chamada Valor. [ { "First Name": "Fred", "Age": 21 }, { "First Name": "Jean", "Age": 20 } ]
Dúas opcións Valor booleano das dúas opcións, verdadeiro ou falso, non a etiqueta que se usa para mostrar. O valor booleano úsase porque é independente do idioma. false
Hiperligazón, texto Cadea entre comiñas dobres. A función escapa as comiñas dobres incrustadas cunha barra invertida, substitúe as novas novas por "\n", e fai outras substitucións estándar de JavaScript. "This is a string."

Especifique o argumento opcional de Formato para controlar o lexible que é o resultado e como se xestionan os tipos de datos non compatibles e binarios. De xeito predeterminado, a saída é o máis compacta posible sen espazos innecesarios nin novas liñas, e non se admiten tipos de datos non compatibles e datos binarios. Podes combinar varios formatos se especificas o operador & .

Enumeración JSONFormat Descripción
JSONFormat.Compact Predefinido. A saída é o máis compacta posible sen espazos engadidos nin novas liñas.
JSONFormat.FlattenValueTables Como unha táboa de valores, a [1,2,3] notación dá como resultado unha táboa que contén rexistros onde cada rexistro ten un único Valor columna. En JSON, esa mesma notación representa unha matriz de tres números. Para facilitar a interoperabilidade entre ambos, esta opción aplana unha Power Fx táboa de valores a unha matriz compatible con JSON en lugar dunha matriz de rexistros.
JSONFormat.IndentFour Para mellorar a lexibilidade, a saída contén unha liña nova para cada columna e nivel de aniñamento e usa catro espazos para cada nivel de sangría.
JSONFormat.IncludeBinaryData O resultado inclúe columnas de imaxe, vídeo e clip de audio. Este formato pode aumentar drasticamente o tamaño do resultado e degradar o rendemento da súa aplicación.
JSONFormat.IgnoreBinaryData O resultado non inclúe columnas de imaxe, vídeo nin clip de audio. Se non especificas nin JSONFormat.IncludeBinaryData nin JSONFormat.IgnoreBinaryData, a función produce un erro se atopa datos binarios.
JSONFormat.IgnoreUnsupportedTypes Os tipos de datos non compatibles están permitidos, pero o resultado non os incluirá. Por defecto, os tipos de datos non compatibles producen un erro.

Use as funcións ShowColumns e DropColumns para controlar que datos inclúe o resultado e eliminar tipos de datos non compatibles.

Dado que JSON pode facer un uso intensivo da memoria e dos cómputos, só pode usar esta función en funcións de comportamento. Pode capturar o resultado de JSON nunha variable, que pode empregar no fluxo de datos.

Se unha columna ten un nome de visualización e un nome lóxico, o resultado contén o nome lóxico. Os nomes para mostrar reflicten o idioma do usuario da aplicación e son, polo tanto, inapropiados para a transferencia de datos a un servizo común.

Sintaxe

JSON( DataStructure [, Format ] )

  • DataStructure – Obrigatorio. A estrutura de datos para converter a JSON. As táboas, os rexistros e os valores primitivos admítense, arbitrariamente aniñados.
  • Format - Opcional. Valor da enumeración JSONFormat. O valor predeterminado é JSONFormat.Compact, que non engade novas liñas nin espazos e bloquea os datos binarios e as columnas non compatibles.

Exemplos

Datos xerárquicos

  1. Engada un control de Botón e axuste a súa propiedade OnSelect nesta 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 o botón mantendo premida a tecla Alt.

    A colección CitiesByCountry créase con esta estrutura de datos, que pode mostrar seleccionando Coleccións no menú Ficheiro e logo seleccionando o nome da colección.

    Colección CitiesByCountry.

    Tamén pode amosar esta colección seleccionando Configuración>Próximas funcións>Activar a vista de resultados da barra de fórmulas, seleccionando o nome da colección na barra de fórmulas e, a continuación, seleccionando a frecha cara abaixo xunto ao nome da colección baixo a barra de fórmulas.

    Colección na vista de resultados da barra de fórmulas.

  3. Engada outro control de botón e axuste a súa propiedade OnSelect nesta fórmula:

    Set( CitiesByCountryJSON, JSON( CitiesByCountry ) )
    

    Esta fórmula establece a variable global CitiesByCountryJSON na representación JSON de CitiesByCountry.

  4. Seleccione o botón mantendo premida a tecla Alt.

  5. Engada un control de Etiqueta e configure a súa propiedade Texto nesta variable:

    CitiesByCountryJSON
    

    A etiqueta mostra este resultado, todo nunha soa liña sen espazos, apta para a súa transmisión a través dunha rede:

    [
      {
        "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 a fórmula do segundo botón para que a saída sexa máis lexible.

    Set( CitiesByCountryJSON, JSON(CitiesByCountry, JSONFormat.IndentFour ))
    
  7. Seleccione o segundo botón mantendo premida a tecla Alt.

    A etiqueta mostra o resultado máis lexible.

    [
      {
        "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"
      }
    ]
    

Imaxes e elementos multimedia en base64

  1. Engada un control de imaxe.

    Este control trae SampleImage consigo.

  2. Engada un control de Botón e axuste a súa propiedade OnSelect nesta fórmula.

    Set( ImageJSON, JSON( SampleImage, JSONFormat.IncludeBinaryData ) )
    
  3. Seleccione o botón mantendo premida a tecla Alt.

  4. Engada unha etiqueta e configure a súa propiedade Texto nesta variable.

    ImageJSON
    
  5. Redimensione o control e reduza o tamaño do tipo de letro segundo sexa necesario para mostrar a maior parte do resultado.

    A etiqueta mostra a cadea de texto que a función JSON capturou.

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

Táboas de valores

Esta fórmula:

JSON( [1,2,3] )

Produce a cadea de texto [{"Valor":1},{"Valor":2},{"Valor":3}].

A mesma fórmula coa opción JSONFormat.FlattenValueTables:

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

Produce a cadea de texto [1,2,3].

Teña en conta que a opción FlattenValueTables non ten ningún impacto ao usar JSON coas coleccións CityPopulations ou CitiesByCountry xa que estas táboas non son Táboas de valores. Unha táboa de valores ten unha única columna e debe chamarse "Valor".