Funktionen ParseJSON
Gäller: Arbetsyteappar
Modellbaserade appar
Power Pages
Power Platform CLI
Tolkar en JSON-sträng och returnerar ett typlöst objekt eller ett typat objekt.
Viktigt
- Att använda det andra argumentet till ParseJSON för att konvertera till ett typifierat objekt är en experimentell funktion.
- Experimentella funktioner är inte avsedda för produktionsanvändning och kan ha begränsad funktionalitet. Funktionerna är tillgängliga före den officiella publiceringen så att du kan få tidig tillgång och ge feedback. Mer information: Förstå experimentella, förhandsgransknings- och pensionerade funktioner i arbetsyteappen
- Beteendet som beskrivs i den här artikeln är endast tillgängligt när den experimentella funktionen Användardefinierade typer i Inställningar > Kommande funktioner > Experimentell är aktiverad (den är inaktiverad som standard).
- Din feedback är mycket viktig för oss. Dela med dig av dina åsikter i Power Apps experimentella funktioner communityforum.
Description
Funktionen ParseJSON parsar en giltig JSON-sträng och returnerar ett typlöst objekt som representerar JSON-strukturen.
Du kan också använda det andra argumentet för att konvertera JSON till ett typifierat objekt som kan användas direkt i Power Fx-formler. Detta gör resultatet lättare att konsumera eftersom konverteringar och tvång vid användningsstället inte längre krävs. Den typlösa JSON-filen mappas till typen med följande regler:
- Kolumner av typen som inte finns i JSON fylls i med tom.
- Kolumner i JSON som inte finns i typen ignoreras.
- För kolumner som finns både i typen och i JSON, måste JSON-värdet kunna tvingas till typen.
Funktionen ParseJSON kan returnera fel om texten inte är giltig JSON enligt JSON-formatet JavaScript Object Notation (JSON) som beskrivs i ECMA-404 och IETF RFC 8259.
Syntax
ParseJSON( JSONString [ , Typ ] )
- JSONString – obligatoriskt. JSON-strukturen som representeras som text.
- Typ – valfritt. Definitionen för Power Fx-typ av JSON-strukturen. Utan det här argumentet returnerar ParseJSON ett objekt utan angiven typ. Med det returnerar funktionen ett starkt typifierat objekt.
Konvertera objektdatatyp som inte har angetts
Utan det andra argumentet returnerar ParseJSON ett typlöst objekt som kräver explicit konvertering av fältvärden i datatyper som stöds. I följande tabell visas datatyper i Power Apps och en motsvarande JSON-datatyp och hur du konverterar den.
Datatyp | JSON-exempel | Beskrivning | Exempelkonversation |
---|---|---|---|
Booleskt | { "bool": true } |
Boolesk är en explicit typ i JSON och kan konverteras direkt. | Boolean( ParseJSON("{ ""bool"": true }").bool ) |
Color | { "color": "#102030" } { "r": 255, "g": 128, "b": 0, "a": 0.5 } |
Det finns ingen färgtyp i JSON. Färgvärden kan skapas från RGBA-heltal eller hexadecimala strängar. |
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 ) ) ) |
Valuta, tal | { "numbervalue": 123.5 } |
al representeras direkt i JSON med en punkt ( . ) som decimaltecken. | Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue ) |
Datum, DateTime, Tid | { "start": "2022-05-10" } { "start": "23:12:49.000" } |
JSON har ingen datum- eller tidstyp och kan därför endast representera datum och tid som strängar. Ett objekt utan typ kan konverteras direkt från en sträng i ISO 8601-format till datum, tid eller datetime. För andra format konverterar du först JSON-fältet till text med funktionen Text() och använder sedan funktionen DateValue(), TimeValue() eller DateTimeValue() som standard använder språket i den aktuella användarens inställningar. |
DateValue( ParseJSON("{ ""appointment"": ""2022-05-10"" }").appointment ) DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment ) ) |
GUID | { "id": "123e4567-e89b-12d3-a456-426655440000" } |
JSON har ingen datatyp för GUID-värden så de kan bara representeras som strängar. | GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id ) |
HyperLink, bild, Media | { "URI": "https://northwindtraders.com/logo.jpg" } |
Dessa datatyper är textdatatyper och kan konverteras till text och sedan användas i Power Apps. | Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }").URI ) |
Alternativ | { "status": 1 } { "status": "Closed" } |
Val presenteras som lokaliserade strängar och visas med en siffra. Funktionen JSON() serialiserar ett val av uppbackningsnummer. Det finns ingen direkt konvertering från tal eller sträng till ett val, men funktionerna Switch() eller If() kan användas på texten eller talvärdet. | Switch( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed ) |
Post | { "field": "value" } |
Det finns ingen direkt konvertering från ett JSON-objekt till en poststruktur, men enskilda fält kan hämtas från objekt utan angiven typ för att bilda en post. | { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) } |
Referens för post | saknas | Postreferenser är unika för datakällor och kan inte serialiseras eller inte. Fältvärden som representerar unika nycklar kan användas i JSON för att identifiera poster som sedan kan identifieras. | saknas |
Register | [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ] [1, 2, 3] |
JSON kan innehålla matriser som kan konverteras till tabeller. Dessa värden kan vara matriser med poster eller matriser med värden som i praktiken är tabeller med en kolumn. ParseJSON() matriser kan endast konverteras till en tabell med en kolumn med objekt utan angiven typ och kan användas som sådan eller konverteras till posttyper med 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 är en explicit typ i JSON och kan konverteras direkt. | Text( ParseJSON( "{ ""stringField"": ""this is text"" }").stringField ) |
Två alternativ | { "available": true } { "available": "Yes" } |
Två val presenteras som lokaliserade strängar och visas med en boolesk. Med JSON()-funktionen serialiseras två alternativ till det booleska värdet. Det finns ingen direkt konvertering från boolesk, tal eller sträng till två val, men funktionerna Switch() eller If() kan användas på texten, talet eller booleska värdet. | Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes ) |
Exempel
Åtkomst till fältvärden
Följande JSON-sträng i en variabel med namnet JsonString
{ "parent": { "child": "text value" }, "number": 567 }
- Följande formel returnerar texten
text value
:Text( ParseJSON( JsonString ).parent.child )
- Följande formel returnerar talet
567
:Value( ParseJSON( JsonString ).number )
Om ett fältnamn består av ett ogiltigt ID-namn kan du placera fältnamnen i enkla citattecken.
Följande JSON-sträng i en variabel med namnet JsonString
{ "0": { "child-field": "text value" } }
- Följande formel returnerar texten
text value
:Text( ParseJSON( JsonString ).'0'.'child-field' )
Tomma värden
Följande JSON-sträng i en variabel med namnet JsonString
{ "text": "text value" , "number": 567, "empty": null }
- Om du försöker komma åt icke-befintliga fält returneras Blank(). Följande formel returnerar
true
:IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
- JSON
null
-värden behandlas som Blank(). Följande formel returnerartrue
:IsBlank( Text( ParseJSON( JsonString ).empty ) )
Enkla matriser
Följande JSON-sträng i en variabel med namnet JsonString
{ "array": [1, 2, 3] }
- Åtkomst till den andra numret i matrisfältets tabell med en kolumn med objekt utan angiven typ och konvertera till en siffra med hjälp av Value() returnerar
2
:Value( Index( ParseJSON( JsonString ).array, 2 ) )
- Konvertera tabellen med en kolumn för objekt utan angiven typ i matrisfältet till en tabell med siffror i en kolumn
{ Value: 1 }, { Value: 2 }, { Value: 3 }
:ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
Matriser av poster
Följande JSON-sträng i en variabel med namnet JsonString
{ "array": [
{ "id": 1, "name": "One"},
{ "id": 2, "name": "Two"}
] }
Konvertera till en maskinskriven tabell med poster direkt med ForAll() kan göras med
ThisRecord.[fieldname]
för att komma åt fälten objekt utan angiven typ och konvertera dem till kända typer:ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
Matris till tabell
- Konvertera objekt utan angiven typ till en tabell med funktionen Table() resulterar i en tabell med en kolumn med objekt utan angiven typ. Objektet måste sedan nås med hjälp av (enskild)
Value
kolumn och konverteras till typer som förklaras tidigare.
Följande JSON-sträng i en variabel med namnet JsonString
{ "array": [1, 2, 3] }
Table() returnerar en tabell med en kolumn med objekt utan angiven typ med en enkolumns Värde för nummer i matrisen...
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() returnerar en tabell med en kolumn objekt utan angiven typ som representerar varje json-objekt i matrisen.
Set(untypedTable, Table( ParseJSON( JsonString ).array ) );
Text( Index(untypedTable, 1).Value.name )