funktion ParseJSON

Gäller för: Arbetsyteappar Copilot Studio Modelldrivna appar Power Platform CLI Dataverse-funktioner Power Pages

Tolkar en JSON-sträng och returnerar ett dynamiskt värde eller ett specifikt typat värde om en typ anges.

Viktigt

Description

Funktionen ParseJSON parsar en giltig JSON-sträng och returnerar ett dynamiskt värde 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) som beskrivs i ECMA-404 och IETF RFC 8259.

Syntax

ParseJSON( JSONString [ , Type ] )

  • JSONString – obligatoriskt. JSON-strukturen som representeras som text.
  • Typ – valfritt. Definitionen för Power Fx-typ av JSON-strukturen. Utan det här argumentet ParseJSON returnerar ett dynamiskt värde. Med det returnerar funktionen ett specifikt typat värde.

Konvertera dynamiska värden

Utan det andra argumentet ParseJSON returnerar ett dynamiskt värde 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 Description Exempelkonversation
Booleskt { "bool": true } Boolesk är en explicit typ i JSON och kan konverteras direkt. Booleskt( 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 dynamiskt värde kan konverteras direkt från en sträng i ISO 8601-format till ett 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 det dynamiska värdet 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 bara konverteras till en tabell med dynamiska värden i en enda kolumn och kan användas som sådana eller konverteras till inskrivna tabeller med poster 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 }
  1. Följande formel returnerar texten text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. 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" } }
  1. 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 }
  1. Om du försöker komma åt icke-befintliga fält returneras Blank(). Följande formel returnerar true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. JSON null-värden behandlas som Blank(). Följande formel returnerar true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Enkla matriser

Följande JSON-sträng i en variabel med namnet JsonString

{ "array": [1, 2, 3] }
  1. När du kommer åt det andra talet i matrisfältets tabell med en kolumn med dynamiska värden och konverterar till ett tal med Value() returneras 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Konvertera tabellen med en kolumn med dynamiska värden i matrisfältet till en enskild kolumntabell med tal { 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"}
    ] }
  1. Du kan konvertera till en typtabell med poster direkt med ForAll() genom att använda ThisRecord.[fieldname] för att komma åt dynamiska fält och konvertera dem till specifika typer:

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

Matris till tabell

  1. Om du konverterar dynamiska värden till en tabell med hjälp av funktionen Table() resulterar det i en tabell med en kolumn med dynamiska värden. 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 dynamiska värden med ett värde med en kolumn för tal 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 med dynamiska värden som representerar varje json-objekt i matrisen.

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