Funzione ParseJSON
Si applica a: App canvas
App basate su modello
Power Pages
Power Platform CLI
Interpreta una stringa JSON e restituisce un oggetto non tipizzato o un oggetto tipizzato.
Importante
- L'uso del secondo argomento di ParseJSON per la conversione in un oggetto tipizzato è una funzionalità sperimentale.
- Le funzionalità sperimentali non sono destinate ad essere utilizzate per la produzione e sono soggette a restrizioni. Queste funzionalità sono disponibili prima di una versione ufficiale in modo che sia possibile ottenere l'accesso iniziale e inviare commenti. Ulteriori informazioni: Comprendere le funzionalità sperimentali, di anteprima e ritirate nelle app canvas
- Il comportamento descritto in questo articolo è disponibile solo quando la funzionalità sperimentale Tipi definiti dall'utente in Impostazioni > Funzionalità in arrivo > Sperimentale è attivata (per impostazione predefinita è disattivata).
- I tuoi commenti sono importanti per noi. Inviare commenti e suggerimenti nel forum della community delle funzionalità sperimentali di Power Apps.
Descrzione
La funzione ParseJSON analizzerà una stringa JSON valida e restituirà un oggetto non tipizzato che rappresenta la struttura JSON.
Facoltativamente, usa il secondo argomento per convertire il codice JSON in un oggetto tipizzato che può essere utilizzato direttamente nelle formule Power Fx. Ciò rende il risultato più facile da consumare in quanto non sono più necessarie conversioni e coercizioni nel punto di utilizzo. Il codice JSON non tipizzato viene mappato al tipo con queste regole:
- Le colonne del tipo che non sono presenti nel codice JSON vengono compilate con spazi vuoti.
- Le colonne nel codice JSON che non sono presenti nel tipo vengono ignorate.
- Per le colonne che si trovano sia nel tipo che in JSON, il valore JSON deve essere coercibile al tipo.
La funzione ParseJSON può restituire errori se il testo non è JSON valido in base al formato JavaScript Object Notation (JSON) descritto in ECMA-404 e IETF RFC 8259.
Sintassi
ParseJSON( JSONString [ , Type ] )
- JSONString – obbligatorio. La struttura JSON rappresentata come testo.
- Tipo: facoltativo. La definizione del tipo Power Fx per la struttura JSON. Senza questo argomento, ParseJSON restituisce un oggetto non tipizzato; con esso, la funzione restituisce un oggetto fortemente tipizzato.
Conversione del tipo di dati dell'oggetto non tipizzato
Senza il secondo argomento, ParseJSON restituisce un oggetto non tipizzato che richiede la conversione esplicita dei valori dei campi nei tipi di dati supportati. La tabella seguente elenca i tipi di dati in Power Apps e un tipo di dati JSON corrispondente e come convertirlo.
Tipo di dati | Esempi JSON | Descrizione | Esempio di conversione |
---|---|---|---|
Boolean | { "bool": true } |
Boolean è un tipo esplicito in JSON e può essere convertito direttamente. | Boolean( ParseJSON("{ ""bool"": true }").bool ) |
Color | { "color": "#102030" } { "r": 255, "g": 128, "b": 0, "a": 0.5 } |
Non esiste un tipo di colore in JSON. I valori di colore possono essere creati da numeri interi RGBA o stringhe esadecimali. |
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 ) ) ) |
Valuta, Numero | { "numbervalue": 123.5 } |
I numeri sono rappresentati direttamente in JSON con un punto (.) come separatore decimale | Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue ) |
Data, DateTime, Ora | { "start": "2022-05-10" } { "start": "23:12:49.000" } |
JSON non ha un tipo di data oppure ora, quindi può rappresentare solo date e ore come stringhe. Un oggetto non tipizzato può essere convertito direttamente da una stringa in formato ISO 8601 in una data, ora o data/ora. Per altri formati, converti prima il campo JSON in testo usando la funzione Text() e quindi utilizza la funzione DateValue(), TimeValue() o DateTimeValue() che per impostazione predefinita utilizzerà la lingua delle impostazioni dell'utente corrente. |
DateValue( ParseJSON("{ ""appointment"": ""2022-05-10"" }").appointment ) DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment ) ) |
GUID | { "id": "123e4567-e89b-12d3-a456-426655440000" } |
JSON non ha un tipo di dati per i GUID, quindi possono essere rappresentati solo come stringhe. | GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id ) |
Collegamento ipertestuale, Immagine, Elementi multimediali | { "URI": "https://northwindtraders.com/logo.jpg" } |
Questi tipi di dati sono tipi di dati di testo e possono essere convertiti in testo e quindi utilizzati in Power Apps. | Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }").URI ) |
Choice | { "status": 1 } { "status": "Closed" } |
Le scelte sono presentate come stringhe localizzate, supportate da un numero. La funzione JSON() serializza una scelta sul numero supportato. Non esiste una conversione diretta da numero o stringa in una scelta, ma le funzioni Switch() o If() possono essere utilizzate sul testo o sul valore numerico. | Switch( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed ) |
Registra | { "field": "value" } |
Non esiste una conversione diretta da un oggetto JSON in una struttura di record, ma i singoli campi possono essere recuperati da un oggetto non tipizzato per formare un record. | { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) } |
Riferimento del record | N/D | I riferimenti dei record sono univoci per le origini dati e non possono essere serializzati o deserializzati. I valori dei campi che rappresentano chiavi univoche possono essere utilizzati in JSON per identificare i record che possono quindi essere cercati. | N/D |
Table | [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ] [1, 2, 3] |
JSON può contenere matrici, che possono essere convertite in tabelle. Questi valori possono essere matrici di record o matrici di valori che sono effettivamente tabelle a colonna singola. Le matrici ParseJSON() possono essere convertite solo in una tabella a colonna singola di oggetti non tipizzati e possono essere utilizzate come tale o convertite in tabelle di record tipizzate utilizzando ForAll(). | ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } ) |
Testo | { "stringField": "this is text" } |
Text è un tipo esplicito in JSON e può essere convertito direttamente. | Text( ParseJSON( "{ ""stringField"": ""this is text"" }").stringField ) |
Due opzioni | { "available": true } { "available": "Yes" } |
Le opzioni Due sono presentate come stringhe localizzate, supportate da un booleano. La funzione JSON() serializza le opzioni Due al valore booleano. Non esiste una conversione diretta da booleano, numero o stringa nelle opzioni Due, ma le funzioni Switch() o If() possono essere utilizzate sul testo, sul valore numerico o booleano. | Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes ) |
Esempi
Accesso ai valori dei campi
Data la seguente stringa JSON in una variabile denominata JsonString
{ "parent": { "child": "text value" }, "number": 567 }
- La formula seguente restituisce il testo
text value
:Text( ParseJSON( JsonString ).parent.child )
- La formula seguente restituisce il numero
567
:Value( ParseJSON( JsonString ).number )
Nel caso in cui il nome di un campo sia costituito da un nome identificativo non valido, è possibile inserire i nomi dei campi tra virgolette singole.
Data la seguente stringa JSON in una variabile denominata JsonString
{ "0": { "child-field": "text value" } }
- La formula seguente restituisce il testo
text value
:Text( ParseJSON( JsonString ).'0'.'child-field' )
Valori vuoti
Data la seguente stringa JSON in una variabile denominata JsonString
{ "text": "text value" , "number": 567, "empty": null }
- Il tentativo di accedere a campi inesistenti restituisce Blank(). La formula seguente restituisce
true
:IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
- I valori JSON
null
vengono considerati Blank(). La formula seguente restituiscetrue
:IsBlank( Text( ParseJSON( JsonString ).empty ) )
Matrici semplici
Data la seguente stringa JSON in una variabile denominata JsonString
{ "array": [1, 2, 3] }
- L'accesso al secondo numero nella tabella a colonna singola del campo della matrice di oggetto non tipizzato e la conversione in un numero utilizzando Value() restituisce
2
:Value( Index( ParseJSON( JsonString ).array, 2 ) )
- La conversione della tabella a colonna singola di oggetto non tipizzato nel campo della matrice, in una tabella di numeri a colonna singola
{ Value: 1 }, { Value: 2 }, { Value: 3 }
:ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
Matrici di record
Data la seguente stringa JSON in una variabile denominata JsonString
{ "array": [
{ "id": 1, "name": "One"},
{ "id": 2, "name": "Two"}
] }
La conversione in una tabella tipizzata di record direttamente con ForAll() può essere fatta usando
ThisRecord.[fieldname]
per accedere ai campi oggetto non tipizzato e convertirli in tipi noti:ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
Matrice a Tabella
- La conversione di un oggetto non tipizzato in una tabella utilizzando la funzione Table() restituisce una tabella a colonna singola di oggetti non tipizzati. È quindi necessario accedere all'oggetto utilizzando la colonna
Value
(singola) e convertirlo in tipi come spiegato in precedenza.
Data la seguente stringa JSON in una variabile denominata JsonString
{ "array": [1, 2, 3] }
Table() restituisce una tabella a colonna singola per gli oggetti non tipizzati con Valore a singola colonna per i numeri nella matrice...
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() restituisce una tabella a colonna singola di oggetti non tipizzati che rappresenta ogni oggetto json nella matrice.
Set(untypedTable, Table( ParseJSON( JsonString ).array ) );
Text( Index(untypedTable, 1).Value.name )