ParseJSON-Funktion
Gilt für: Canvas-Apps
Modellgesteuerte Apps
Power Pages
Power Platform CLI
Interpretiert eine JSON-Zeichenfolge und gibt ein nicht typisiertes Objekt oder ein typisiertes Objekt zurück.
Wichtig
- Die Verwendung des zweiten Arguments für ParseJSON zum Konvertieren in ein typisiertes Objekt ist ein experimentelles Feature.
- Die experimentellen Funktionen sind nicht für die Produktion vorgesehen und weisen möglicherweise eine eingeschränkte Funktionalität auf. Diese Funktionen stehen vor dem offiziellen Release zur Verfügung, damit Sie früher Zugriff darauf erhalten und Feedback geben können. Weitere Informationen: Verstehen Sie experimentelle, Vorschau- und eingestellte Funktionen in Canvas-Apps
- Das in diesem Artikel beschriebene Verhalten ist nur verfügbar, wenn das experimentelle Feature Benutzerdefinierte Typen in Einstellungen > Kommende Funktionen > Experimentell aktiviert ist (standardmäßig ist es deaktiviert).
- Ihr Feedback ist sehr hilfreich für uns. Bitte teilen Sie uns Ihre Meinung in den Power Apps Communityforen zu experimentellen Funktionen mit.
Beschreibung
Die ParseJSON-Funktion analysiert eine gültige JSON-Zeichenfolge und gibt ein nicht typisiertes Objekt zurück, das die JSON-Struktur darstellt.
Verwenden Sie optional das zweite Argument, um den JSON-Code in ein typisiertes Objekt zu konvertieren, das direkt in Power Fx-Formeln verwendet werden kann. Das macht das Ergebnis leichter konsumierbar, da Umwandlungen und Zwang am Einsatzort entfallen. Der nicht typisierte JSON-Code wird dem Typ mit den folgenden Regeln zugeordnet:
- Spalten des Typs, die im JSON nicht vorhanden sind, werden mit leer gefüllt.
- Spalten im JSON-Code, die im Typ nicht vorhanden sind, werden ignoriert.
- Bei Spalten, die sowohl im Typ als auch im JSON-Code vorliegen, muss der JSON-Wert in den Typ konvertierbar sein.
Die ParseJSON-Funktion kann Fehler zurückgeben, wenn der Text kein gültiges JSON-Format gemäß dem in ECMA-404 und IETF-RFC 8259 beschriebenen JSON-Format (JavaScript Object Notation) ist.
Syntax
ParseJSON( JSONString [ , Typ ] )
- JSONString – Erforderlich. Die als Text dargestellte JSON-Struktur.
- Typ: optional. Die Power Fx-Typdefinition für die JSON-Struktur. Ohne dieses Argument gibt ParseJSON ein nicht typisiertes Objekt zurück; mit ihm gibt die Funktion ein stark typisiertes Objekt zurück.
Konvertieren des nicht typisierten Objektdatentyps
Ohne des zweite Argument gibt ParseJSON ein nicht typisiertes Objekt zurück, was eine explizite Konvertierung von Feldwerten in unterstützte Datentypen erfordert. Die folgende Tabelle listet die Datentypen in Power Apps und einen entsprechenden JSON-Datentyp auf und wie man ihn konvertiert.
Datentyp | JSON-Beispiele | Beschreibung | Beispielkonvertierung |
---|---|---|---|
Boolesch | { "bool": true } |
Boolean ist ein expliziter Typ in JSON und kann direkt konvertiert werden. | Boolean( ParseJSON("{ ""bool"": true }").bool ) |
Color | { "color": "#102030" } { "r": 255, "g": 128, "b": 0, "a": 0.5 } |
Es gibt keinen Farbtyp in JSON. Farbwerte können aus RGBA-Ganzzahlen oder hexadezimalen Zeichenfolgen erstellt werden. |
ColorValue( ParseJSON( "{ ""Farbe"": ""#102030"" }" ).Farbe ) 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 ) ) ) |
Währung, Zahl | { "numbervalue": 123.5 } |
Zahlen werden in JSON direkt mit einem Punkt ( .) als Dezimaltrennzeichen getrennt. | Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue ) |
Datum, DateTime und Uhrzeit | { "start": "2022-05-10" } { "start": "23:12:49.000" } |
JSON hat keinen Datums- oder Uhrzeittyp und kann daher Datums- und Uhrzeitangaben nur als Zeichenfolgen darstellen. Ein nicht typisiertes Objekt kann direkt von einer Zeichenfolge im ISO 8601-Format in ein Datum, eine Uhrzeit oder eine Datumszeit konvertiert werden. Konvertieren Sie für andere Formate zuerst das JSON-Feld mithilfe der Text()-Funktion in Text und verwenden Sie dann die Funktion DateValue(), TimeValue() oder DateTimeValue(), die standardmäßig die Sprache der aktuellen Benutzereinstellungen verwendet. |
DateValue( ParseJSON("{ ""Termin"": ""2022-05-10"" }").Termin ) DateValue( Text( ParseJSON("{ ""Termin"": ""May 5, 2022"" }").Termin ) ) |
GUID | { "id": "123e4567-e89b-12d3-a456-426655440000" } |
JSON hat keinen Datentyp für GUIds, sodass sie nur als Zeichenfolgen dargestellt werden können. | GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id ) |
HyperLink, Bild und Medien | { "URI": "https://northwindtraders.com/logo.jpg" } |
Diese Datentypen sind Textdatentypen und können in Text konvertiert und dann in Power Apps verwendet werden. | Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }").URI ) |
Auswahl | { "status": 1 } { "status": "Closed" } |
Auswahlmöglichkeiten werden als lokalisierte Zeichenfolgen dargestellt, die von einer Zahl unterstützt werden. Die JSON()-Funktion serialisiert eine Auswahl zu ihrer unterstützenden Zahl. Es gibt keine direkte Umwandlung von Zahl oder Zeichenfolge in eine Auswahl, aber die Funktionen Switch() oder If() können auf den Text- oder Zahlenwert angewendet werden. | Switch( Value( ParseJSON( "{ ""Status"": 1 }" ).Status ), 0, Status.Open, 1, Status.Closed ) |
Datensatz | { "field": "value" } |
Es gibt keine direkte Konvertierung von einem JSON-Objekt in eine Datensatzstruktur, aber einzelne Felder können aus dem nicht typisierten Objekt abgerufen werden, um einen Datensatz zu bilden. | { Feld: Text( ParseJSON( "{ ""Feld"": ""Wert"" }" ).Feld ) } |
Datensatzverweis | Nicht zutreffend | Datensatzverweise sind für Datenquellen eindeutig und können nicht serialisiert oder deserialisiert werden. Feldwerte, die eindeutige Schlüssel darstellen, könnten in JSON verwendet werden, um Datensätze zu identifizieren, die dann nachgeschlagen werden können. | Nicht zutreffend |
Table | [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ] [1, 2, 3] |
JSON kann Arrays enthalten, die in Tabellen umgewandelt werden können. Diese Werte können Arrays von Datensätzen oder Arrays von Werten sein, die effektiv einspaltige Tabellen sind. ParseJSON()-Arrays können nur in eine einspaltige Tabelle von nicht typisierten Objekten konvertiert werden und können als solche verwendet oder mithilfe von ForAll() in typisierte Tabellen von Datensätzen konvertiert werden. | ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name"": ""eins"" }, { ""id"": 2, ""name"": ""zwei"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } ) |
Text | { "stringField": "this is text" } |
Text ist ein expliziter Typ in JSON und kann direkt konvertiert werden. | Text( ParseJSON( "{ ""stringField"": ""das ist ein Text"" }").stringField ) |
Zwei Optionen | { "available": true } { "available": "Yes" } |
Zwei Optionen werden als lokalisierte Zeichenfolgen dargestellt, die von einem Boolean unterstützt werden. Die JSON()-Funktion serialisiert zwei Optionen zu ihrem booleschen Wert. Es gibt keine direkte Umwandlung von Boolean, Zahl oder Zeichenfolge in zwei Optionen, aber die Funktionen Switch() oder If() können auf den Text-, Zahlen- oder booleschen Wert angewendet werden. | Switch( Boolean( ParseJSON( "{ ""vorhanden"": true }" ).vorhanden ), false, Availability.No, true, Availability.Yes ) |
Beispiele
Zugreifen auf Feldwerte
Die folgende JSON-Zeichenfolge in einer Variablen mit dem Namen JsonString
vorausgesetzt
{ "parent": { "child": "text value" }, "number": 567 }
- Die folgende Formel gibt den Text
text value
zurück:Text( ParseJSON( JsonString ).parent.child )
- Die folgende Formel gibt die Zahl
567
zurück:Value( ParseJSON( JsonString ).number )
Falls ein Feldname aus einem ungültigen Bezeichnernamen besteht, können Sie die Feldnamen in einfache Anführungszeichen setzen.
Die folgende JSON-Zeichenfolge in einer Variablen mit dem Namen JsonString
vorausgesetzt
{ "0": { "child-field": "text value" } }
- Die folgende Formel gibt den Text
text value
zurück:Text( ParseJSON( JsonString ).'0'.'child-field' )
Leerstellen
Die folgende JSON-Zeichenfolge in einer Variablen mit dem Namen JsonString
vorausgesetzt
{ "text": "text value" , "number": 567, "empty": null }
- Der Versuch, auf nicht vorhandene Felder zuzugreifen, gibt Blank() zurück. Die folgende Formel gibt
true
zurück:IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
- JSON-
null
-Werte werden betrachtet als Blank(). Die folgende Formel gibttrue
zurück:IsBlank( Text( ParseJSON( JsonString ).empty ) )
Einfache Arrays
Die folgende JSON-Zeichenfolge in einer Variablen mit dem Namen JsonString
vorausgesetzt
{ "array": [1, 2, 3] }
- Der Zugriff auf die zweite Zahl in der einspaltigen Tabelle des nicht typisierten Objekts des Array-Felds und die Umwandlung in eine Zahl mit Value() gibt
2
zurück:Value( Index( ParseJSON( JsonString ).array, 2 ) )
- Das Konvertieren der einspaltigen Tabelle des nicht typisierten Objekts im Array-Feld in eine einspaltige Zahlentabelle
{ Value: 1 }, { Value: 2 }, { Value: 3 }
:ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
Arrays von Datensätzen
Die folgende JSON-Zeichenfolge in einer Variablen mit dem Namen JsonString
vorausgesetzt
{ "array": [
{ "id": 1, "name": "One"},
{ "id": 2, "name": "Two"}
] }
Konvertieren in eine typisierte Tabelle von Datensätzen direkt mit ForAll() kann durch die Verwendung von
ThisRecord.[fieldname]
erfolgen, um auf die Felder untypisiertes Objekt zuzugreifen und sie in bekannte Typen zu konvertieren:ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
Array für Tabelle
- Konvertieren von nicht typisiertem Objekt zu einer Tabelle, indem Sie die Ergebnisse der Tabelle() in eine einspaltige Tabelle von nicht typisierten Objekten verwenden. Auf das Objekt muss dann mit der Spalte
Value
(einzelne) Spalte zugegriffen und wie zuvor erläutert in Typen konvertiert werden.
Die folgende JSON-Zeichenfolge in einer Variablen mit dem Namen JsonString
vorausgesetzt
{ "array": [1, 2, 3] }
Tisch() gibt eine einspaltige Tabelle von nicht typisierten Objekten mit einem einspaltigen Wert für Zahl im Array zurück...
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"}
] }
Tabelle() gibt eine einspaltige Tabelle von nicht typisierten Objekten zurück, die jedes json-Objekt im Array darstellt.
Set(untypedTable, Table( ParseJSON( JsonString ).array ) );
Text( Index(untypedTable, 1).Value.name )