Partager via


ParseJSON Fonction

S’applique à : Applications Canevas Copilot Studio Basées sur des modèles , applications Power Platform CLI Dataverse fonctions Power Pages

Interprète une chaîne JSON et retourne une valeur dynamique ou une valeur typée spécifique si un type est fourni.

Important

Description

La ParseJSON fonction analyse une chaîne JSON valide et retourne une valeur dynamique représentant la structure JSON.

Vous pouvez également utiliser le deuxième argument pour convertir le JSON en objet typé qui peut être directement utilisé dans des formules Power Fx. Cela rend le résultat plus facile à consommer, car les conversions et les coercitions au point d’utilisation ne sont plus nécessaires. Le JSON sans type est mappé au type avec ces règles :

  • Les colonnes du type qui ne sont pas présentes dans le JSON sont remplies d’espaces vides.
  • Les colonnes du JSON qui ne sont pas présentes dans le type sont ignorées.
  • Pour les colonnes qui sont à la fois dans le type et dans JSON, la valeur JSON doit être coercitive par rapport au type.

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

Syntaxe

ParseJSON( JSONString [ , Type ] )

  • JSONString : Obligatoire. Structure JSON représentée sous forme de texte.
  • Type : facultatif. Définition de type Power Fx pour la structure JSON. Sans cet argument, ParseJSON retourne une valeur dynamique ; avec elle, la fonction retourne une valeur typée spécifique.

Conversion de valeurs dynamiques

Sans le deuxième argument, ParseJSON retourne une valeur dynamique qui nécessite une conversion explicite de 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 : ( « { « "r" » : 255, « "g" » : 128, « "b" » : ParseJSON0, « "a" » : 0.5 } » ) }, RGBA( Value( uo.r ), Value( uo.g ), Value( uo.b ), 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. Une valeur dynamique peut être directement convertie d’une chaîne au format ISO 8601 en date, heure ou datetime. 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" » : « "5 mai 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’existe aucune conversion directe d’un objet JSON vers une structure d’enregistrement, mais des champs individuels peuvent être récupérés de la valeur dynamique pour former un enregistrement. { champ : 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. ParseJSON() Les tableaux ne peuvent être convertis qu’en une seule table de colonnes de valeurs dynamiques et peuvent être utilisés comme tels ou convertis en tables typées d’enregistrements à l’aide de 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. L’accès au deuxième nombre dans la table à colonne unique du champ tableau des valeurs dynamiques et la conversion en nombre à l’aide de Value() retourne 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Conversion de la table à colonne unique de valeurs dynamiques dans le champ de tableau, en une seule table de colonnes 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 d’enregistrements typée directement avec ForAll() peut être effectuée en utilisant ThisRecord.[fieldname] pour accéder aux champs dynamiques et les convertir en types spécifiques :

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

Du tableau à la table

  1. La conversion de valeurs dynamiques en table à l’aide de la fonction Table() entraîne une table à colonne unique de valeurs dynamiques . 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() retourne une table à colonne unique de valeurs dynamiques 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() retourne une table à colonne unique de valeurs dynamiques qui représente chaque objet json dans le tableau.

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