Funkcja ParseJSON

Dotyczy: Aplikacje kanwy Aplikacje oparte na modelu Power Platform CLI

Interpretuje ciąg JSON i zwraca niedysportowany obiekt.

Popis

Funkcja ParseJSON przeanalizuje poprawny ciąg JSON i zwróci beztypowy obiekt reprezentujący strukturę JSON.

Funkcja ParseJSON może zwracać błędy, jeśli tekst jest nieprawidłowy w JSON zgodnie z formatem JavaScript Object Notation (JSON) opisanym w ECMA-404 i IETF RFC 8259.

Składnia

ParseJSON( JSONString )

  • JSONString – wymagane. Struktura JSON reprezentowana przez tekst.

Konwertowanie typu danych obiektu niedyskonwertowego

Funkcja ParseJSON zwraca niespożyty obiekt, który wymaga jawnej konwersji wartości pól w obsługiwanych typach danych. W poniższej tabeli wymieniono typy danych w usłudze Power Apps i odpowiadający im typ danych JSON oraz sposób ich konwersji.

Typ danych Przykłady JSON opis Przykład konwersacji
Wartość logiczna { "bool": true } Wartość logiczna jest jawnym typem w JSON i może być bezpośrednio przekonwertowana. Boolean( ParseJSON("{ ""bool"": true }").bool )
Color { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
W programie JSON nie ma typu kolorów. Wartości kolorów można tworzyć na podstawie liczb całkowitych i szesnastkowych ciągów. 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 ) ) )
Waluta, liczba { "numbervalue": 123.5 } Liczby są reprezentowane bezpośrednio w JSON za pomocą okresu ( . ) jako separatorem dziesiętnym. Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue )
Data, data i godzina, godzina { "start": "2022-05-10" }
{ "start": "23:12:49.000" }
JSON nie ma typu data lub godzina, więc może reprezentować tylko daty i godziny jako ciągi. Obiekt bez określonego typu można bezpośrednio przekonwertować z ciągu znaków w formacie ISO 8601 na datę, godzinę lub datę i godzinę. W przypadku innych formatów najpierw przekonwertuj pole JSON na tekst za pomocą funkcji Text(), a następnie użyj funkcji DateValue(), TimeValue() lub DateTimeValue() funkcja, która domyślnie będzie używać języka ustawień bieżącego użytkownika. DateValue( ParseJSON("{ ""appointment"": ""2022-05-10"" }").appointment )
DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment ) )
Identyfikator GUID { "id": "123e4567-e89b-12d3-a456-426655440000" } JSON nie ma typu danych dla identyfikatorów GUID, więc mogą być reprezentowane tylko jako ciągi. GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id )
Hiperłącze, obraz, multimedia { "URI": "https://northwindtraders.com/logo.jpg" } Te typy danych są typami danych tekstowych i mogą być konwertowane na tekst, a następnie używane w programie Power Apps. Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }").URI )
Opcja wyboru { "status": 1 }
{ "status": "Closed" }
Wybory są przedstawiane jako zlokalizowane ciągi znaków poparte liczbą. Funkcja JSON() szereguje wybór na jego numer kopii zapasowej. Nie ma bezpośredniej konwersji z liczby lub ciągu na wybór, ale funkcje Switch() lub If() mogą być użyte na tekście lub liczbie wartość. Switch( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed )
Nagraj { "field": "value" } Nie ma bezpośredniej konwersji z obiektu JSON na strukturę rekordu, ale poszczególne pola można pobrać z obiektu bez typu, aby utworzyć rekord. { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) }
Odwołanie do rekordu nie dotyczy Odwołania do rekordów są unikatowe dla źródeł danych i nie można ich serializować ani cofać serializacji. Wartości pól reprezentujące unikalne klucze mogą być używane w JSON do identyfikowania rekordów, które można następnie wyszukać. nie dotyczy
Table [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
JSON może zawierać tablice, które można przekonwertować na tabele. Te wartości mogą być tablicami rekordów lub tablicami wartości, które w rzeczywistości są tabelami jednokolumnowymi. ParseJSON() tablice można przekonwertować tylko na pojedynczą tabelę kolumn z obiektami bez typu i można ich używać jako takich lub konwertować na tabele rekordów wpisanych przy użyciu ForAll(). ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } )
Tekst { "stringField": "this is text" } Tekst jest jawnym typem w JSON i może być bezpośrednio przekonwertowana. Text( ParseJSON( "{ ""stringField"": ""this is text"" }").stringField )
Dwie opcje { "available": true }
{ "available": "Yes" }
Dwie opcje są prezentowane jako zlokalizowane ciągi, poparte wartością logiczną. Funkcja JSON() szereguje dwie opcje na wartość logiczną. Nie ma bezpośredniej konwersji z wartości logicznej, liczby lub ciągu na dwie opcje, ale funkcje Switch() lub If() mogą być użyte na tekście, liczbie lub wartości logicznej. Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes )

Przykłady

Dostęp do wartości pól

Na względu na następujący ciąg JSON w zmiennej o nazwie JsonString

{ "parent": { "child": "text value" }, "number": 567 }
  1. Poniższa formuła zwraca tekst text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. Poniższa formuła zwraca numer 567:
    Value( ParseJSON( JsonString ).number )
    

Jeśli nazwa pola składa się z nieprawidłowej nazwy identyfikatora, nazwy pól można umieścić w pojedynczych cudzysłowach. Na względu na następujący ciąg JSON w zmiennej o nazwie JsonString

{ "0": { "child-field": "text value" } }
  1. Poniższa formuła zwraca tekst text value:
    Text( ParseJSON( JsonString ).'0'.'child-field' )
    

Wartości puste

Na względu na następujący ciąg JSON w zmiennej o nazwie JsonString

{ "text": "text value" , "number": 567, "empty": null }
  1. Próba uzyskania dostępu do pól innych niż istniejące zwraca wartość Blank(). Następująca formuła zwraca wartość true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. Wartości JSON null są uważane za Blank(). Następująca formuła zwraca wartość true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Proste tablice

Na względu na następujący ciąg JSON w zmiennej o nazwie JsonString

{ "array": [1, 2, 3] }
  1. Uzyskanie dostępu do drugiej liczby w jednokolumnowej tabeli pola tablicy z obiektem bez typu i przekonwertowanie na liczbę przy użyciu Value() zwraca 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Konwertowanie jednokolumnowej tabeli obiektu bez typu w polu tablicy na jednokolumnową tabelę liczb { Value: 1 }, { Value: 2 }, { Value: 3 }:
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

Rekordy tablic

Na względu na następujący ciąg JSON w zmiennej o nazwie JsonString

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. Bezpośrednia konwersja do tabeli rekordów z określonym typem za pomocą ForAll() może zostać wykonana za pomocą ThisRecord.[fieldname] w celu uzyskania dostępu do pól obiektu bez typu i przekonwertowania ich na znane typy:

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

Tablica do tabeli

  1. Konwersja obiektów bez typu na tabelę przy użyciu funkcji Table() powoduje, że jest w tym przypadku edytowana tabela obiektów bez typu. Następnie dostęp do obiektu należy uzyskać, korzystając z kolumny Value (pojedynczej) i przekonwertować na typy, jak uprzednio o wyjaśniono.

Na względu na następujący ciąg JSON w zmiennej o nazwie JsonString

{ "array": [1, 2, 3] }

Tabela() zwraca jednokolumnową tabelę zawierającą obiekty bez typu z jednokolumnową wartością dla liczby w tablicy...

 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() zwraca jednokolumnową tabelę zawierającą obiekty bez typu reprezentujące każdy obiekt JSON w tablicy.

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