Condividi tramite


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.

Descrzione

La funzione ParseJSON analizzerà una stringa JSON valida e restituirà un oggetto non tipizzato che rappresenta la struttura JSON.

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 )

  • JSONString – obbligatorio. La struttura JSON rappresentata come testo.

Conversione del tipo di dati dell'oggetto non tipizzato

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 }
  1. La formula seguente restituisce il testo text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. 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" } }
  1. 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 }
  1. Il tentativo di accedere a campi inesistenti restituisce Blank(). La formula seguente restituisce true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. I valori JSON null vengono considerati Blank(). La formula seguente restituisce true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Matrici semplici

Data la seguente stringa JSON in una variabile denominata JsonString

{ "array": [1, 2, 3] }
  1. 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 ) )
    
  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"}
    ] }
  1. 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

  1. 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 )