Partager via


Fonction ParseJSON

S’applique à : Applications canevas Applications pilotées par modèle Power Platform CLI

Interprète une chaîne JSON et renvoie un objet sans type.

Description

La fonction ParseJSON analyse une chaîne JSON valide et renvoit un objet sans type représentant la structure JSON.

La fonction ParseJSON peut renvoyer des erreurs si le texte n’est pas un JSON valide selon le format JavaScript Object Notation (JSON) décrit dans ECMA-404 et IETF RFC 8259.

Syntaxe

ParseJSON( JSONString )

  • JSONString : obligatoire. Structure JSON représentée sous forme de texte.

Conversion du type de données d’objet sans type

ParseJSON renvoie un objet sans type qui nécessite une conversion explicite des valeurs de champ dans les types de données pris en charge. La table suivante répertorie les types de données dans Power Apps et un type de données JSON correspondant et comment le convertir.

Type de données Exemples JSON Description Exemple de conversion
Entier { "bool": true } Boolean est un type explicite dans JSON et peut être directement converti. Boolean( ParseJSON("{ ""bool"": true }").bool )
Color { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
Il n’y a pas de type de couleur dans JSON. Les valeurs de couleur peuvent être créées à partir d’entiers RGBA ou de chaînes hexadécimales. 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 ) ) )
Devise, Nombre { "numbervalue": 123.5 } Les nombres sont représentés directement dans JSON avec un point ( . ) comme séparateur décimal. Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue )
Date, DateHeure, Heure { "start": "2022-05-10" }
{ "start": "23:12:49.000" }
JSON n’a pas de type de date ou d’heure et ne peut donc représenter que des dates et des heures sous forme de chaînes. Un objet sans type peut être directement converti depuis une chaîne au format ISO 8601 en une date, une heure ou une date/heure. Pour les autres formats, convertissez d’abord le champ JSON en texte à l’aide de la fonction Text(), puis utilisez la fonction DateValue(), TimeValue() ou DateTimeValue() qui utilise par défaut la langue des paramètres de l’utilisateur actuel. DateValue( ParseJSON("{ ""appointment"": ""2022-05-10"" }").appointment )
DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment ) )
GUID { "id": "123e4567-e89b-12d3-a456-426655440000" } JSON n’a pas de type de données pour les GUID, ils ne peuvent donc être représentés que sous forme de chaînes. GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id )
Lien hypertexte, image, média { "URI": "https://northwindtraders.com/logo.jpg" } Ces types de données sont des types de données texte et peuvent être convertis en texte, puis utilisés dans Power Apps. Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }").URI )
Option { "status": 1 }
{ "status": "Closed" }
Les choix sont présentés sous forme de chaînes localisées, soutenues par un nombre. La fonction JSON() sérialise un choix en numéro de sauvegarde. Il n’y a pas de conversion directe d’un nombre ou d’une chaîne vers un choix, mais les fonctions Switch() ou If() peuvent être utilisées sur le texte ou la valeur numérique. Switch( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed )
Enregistrer { "field": "value" } Il n’y a pas de conversion directe d’un objet JSON en une structure d’enregistrement, mais des champs individuels peuvent être récupérés à partir de l’objet sans type pour constituer un enregistrement. { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) }
Référence d’enregistrement n/d Les références d’enregistrement sont uniques aux sources de données et ne peuvent pas être sérialisées ou non sérialisées. Les valeurs de champ qui représentent des clés uniques peuvent être utilisées dans JSON pour identifier les enregistrements qui peuvent ensuite être recherchés. n/d
Table [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
JSON peut contenir des tableaux, qui peuvent être convertis en tables. Ces valeurs peuvent être des tableaux d’enregistrements ou des tableaux de valeurs qui sont en fait des tables à une seule colonne. Les tableaux ParseJSON() peuvent être convertis uniquement une table à colonne unique d’objets sans type, et peuvent être utilisés en tant que tels ou convertis en tables de type d’enregistrements avec ForAll(). ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } )
Text { "stringField": "this is text" } Text est un type explicite dans JSON et peut être directement converti. Text( ParseJSON( "{ ""stringField"": ""this is text"" }").stringField )
Deux options { "available": true }
{ "available": "Yes" }
Deux options sont présentées sous forme de chaînes localisées, soutenues par une valeur booléenne. La fonction JSON() sérialise deux options en sa valeur booléenne. Il n’y a pas de conversion directe d’une valeur booléenne, d’un nombre ou d’une chaîne vers deux options, mais les fonctions Switch() ou If() peuvent être utilisées sur le texte, le nombre ou la valeur booléenne. Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes )

Examples

Accéder aux valeurs de champ

Étant donné la chaîne JSON suivante dans une variable nommée JsonString

{ "parent": { "child": "text value" }, "number": 567 }
  1. La formule suivante renvoie le texte text value :
    Text( ParseJSON( JsonString ).parent.child )
    
  2. La formule suivante renvoie le nombre 567 :
    Value( ParseJSON( JsonString ).number )
    

Si un nom de champ se compose d’un nom d’identifiant invalide, vous pouvez mettre les noms de champ entre guillemets simples. Étant donné la chaîne JSON suivante dans une variable nommée JsonString

{ "0": { "child-field": "text value" } }
  1. La formule suivante renvoie le texte text value :
    Text( ParseJSON( JsonString ).'0'.'child-field' )
    

Vide

Étant donné la chaîne JSON suivante dans une variable nommée JsonString

{ "text": "text value" , "number": 567, "empty": null }
  1. Essayer d’accéder à des champs inexistants renvoie Blank(). La formule suivante renvoie true :
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. Les valeurs null JSON sont considérées comme Blank(). La formule suivante renvoie true :
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Tableaux simples

Étant donné la chaîne JSON suivante dans une variable nommée JsonString

{ "array": [1, 2, 3] }
  1. Accéder au deuxième nombre dans la table à une seule colonne du champ tableau de l’objet sans type et convertir en un nombre en utilisant Value() renvoie 2 :
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Conversion de la table à colonne unique de l’objet sans type dans le champ tableau, à une table à colonne unique de nombres { Value: 1 }, { Value: 2 }, { Value: 3 } :
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

Tableaux d’enregistrements

Étant donné la chaîne JSON suivante dans une variable nommée JsonString

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. La conversion en une table typée d’enregistrements directement avec ForAll() peut être faite en utilisant ThisRecord.[fieldname] pour accéder aux champs objet sans type et convertissez-les en types connus :

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

Du tableau à la table

  1. La conversion de l’objet sans type en une table à la fonction Table() entraîne une table à colonne unique d’objets sans type. L’objet doit ensuite être accessible à l’aide de la colonne (unique) Value et être converti en types comme expliqué précédemment.

Étant donné la chaîne JSON suivante dans une variable nommée JsonString

{ "array": [1, 2, 3] }

Table() renvoie une table à colonne unique d’objets sans type avec une valeur à colonne unique pour le nombre dans le tableau...

 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() renvoie une table à colonne unique d’objets sans type qui représente chaque objet json dans le tableau.

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