Fonction ParseJSON
S’applique à : Applications canevas
Applications pilotées par modèle
Power Pages
Power Platform CLI
Interprète une chaîne JSON et renvoie un objet sans type ou un objet typé.
Important
- L’utilisation du deuxième argument de ParseJSON pour convertir en objet typé est une fonctionnalité expérimentale.
- Les fonctionnalités expérimentales ne sont pas destinées à une utilisation en production et peuvent être restreintes. Ces fonctionnalités sont disponibles avant une publication officielle afin que vous puissiez y accéder en avant-première et fournir des commentaires. En savoir plus : Comprendre les fonctionnalités expérimentales, en version préliminaire et retirées dans les applications canevas
- Le comportement décrit dans cet article n’est disponible que lorsque la fonctionnalité expérimentale Types définis par l’utilisateur dans Paramètres > Fonctionnalités à venir > Expérimental est activée (elle est désactivée par défaut).
- Vos commentaires nous sont très utiles. Donnez-nous votre avis sur le forum de la communauté des fonctionnalités expérimentales Power Apps.
Description
La fonction ParseJSON analyse une chaîne JSON valide et renvoie un objet sans type 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 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 [ , 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 renvoie un objet sans type ; avec lui, la fonction renvoie un objet fortement typé.
Conversion du type de données d’objet sans type
Avec le deuxième argument, 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 }
- La formule suivante renvoie le texte
text value
:Text( ParseJSON( JsonString ).parent.child )
- 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" } }
- 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 }
- Essayer d’accéder à des champs inexistants renvoie Blank(). La formule suivante renvoie
true
:IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
- Les valeurs
null
JSON sont considérées comme Blank(). La formule suivante renvoietrue
:IsBlank( Text( ParseJSON( JsonString ).empty ) )
Tableaux simples
Étant donné la chaîne JSON suivante dans une variable nommée JsonString
{ "array": [1, 2, 3] }
- 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 ) )
- 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"}
] }
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
- 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 )