Condividi tramite


Funzione ParseJSON

Si applica a: App canvas Copilot Studio App basate su modelli power platform Funzioni di Power Platform PowerVerse

Interpreta una stringa JSON e restituisce un valore Dinamico o un valore tipizzato specifico se viene fornito un tipo.

Importante

Descrzione

La ParseJSON funzione analizza una stringa JSON valida e restituisce un valore Dinamico 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 ParseJSON funzione può restituire errori se il testo non è valido in base al formato JSON (JavaScript Object Notation) 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 valore dinamico, con la funzione restituisce un valore tipizzato specifico.

Conversione di valori dinamici

Senza il secondo argomento, ParseJSON restituisce un valore Dinamico che richiede la conversione esplicita dei valori di campo 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 Descrzione 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.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 valore dinamico può essere convertito direttamente da una stringa in formato ISO 8601 a una data, ora o datetime. 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 alcuna conversione diretta da un oggetto JSON a una struttura di record, ma è possibile recuperare singoli campi dal valore Dynamic 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. ParseJSON() le matrici possono essere convertite solo in una singola tabella di colonne di valori Dinamici e possono essere usate come tali o convertite in tabelle tipite di record usando 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 valori dinamici e la conversione in un numero tramite Value() restituisce 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Conversione della tabella a colonna singola dei valori dinamici nel campo della matrice in una singola tabella di colonne di numeri { 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 eseguita usando ThisRecord.[fieldname] per accedere ai campi dinamici e convertirli in tipi specifici:

    ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
    

Matrice a Tabella

  1. La conversione di valori dinamici in una tabella tramite la funzione Table() genera una tabella a colonna singola di valori dinamici . È 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 di valori dinamici con valore a colonna singola per il numero 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 valori dinamici che rappresenta ogni oggetto JSON nella matrice.

  Set(untypedTable, Table( ParseJSON( JsonString ).array ) );
  
  Text( Index(untypedTable, 1).Value.name )