Bagikan melalui


fungsi ParseJSON

Berlaku untuk: Aplikasi Kanvas Copilot Studio Model-driven aplikasi Power Platform CLI Dataverse fungsi Power Pages

Menginterpretasikan string JSON dan mengembalikan nilai Dinamis atau nilai jenis tertentu jika jenis disediakan.

Penting

Description

Fungsi ini ParseJSON menguraikan string JSON yang valid dan mengembalikan nilai Dinamis yang mewakili struktur JSON.

Secara opsional, gunakan argumen kedua untuk mengonversi JSON menjadi objek yang diketik yang dapat langsung digunakan dalam Power Fx rumus. Hal ini membuat hasilnya lebih mudah dikonsumsi karena konversi dan paksaan pada titik penggunaan tidak lagi diperlukan. JSON yang tidak diketik dipetakan ke jenis dengan aturan berikut:

  • Kolom dalam jenis yang tidak ada dalam JSON diisi dengan kosong.
  • Kolom dalam JSON yang tidak ada dalam jenis diabaikan.
  • Kolom yang berada dalam jenis dan JSON, nilai JSON harus dapat dipaksakan ke jenis.

Fungsi ParseJSON ini dapat mengembalikan kesalahan jika teks tidak valid JSON sesuai dengan format JavaScript Object Notation (JSON) yang dijelaskan dalam ECMA-404 dan IETF RFC 8259.

Sintaks

ParseJSON( JSONString [ , Jenis ] )

  • JSONString – Wajib. Struktur JSON dinyatakan sebagai teks.
  • Jenis - Opsional. Definisi Power Fx jenis untuk struktur JSON. Tanpa argumen ini, ParseJSON mengembalikan nilai dinamis; dengan itu fungsi mengembalikan nilai yang ditik tertentu.

Mengonversi nilai Dinamis

Tanpa argumen kedua, ParseJSON mengembalikan nilai Dinamis yang memerlukan konversi eksplisit nilai bidang dalam jenis data yang didukung. Tabel berikut mencantumkan jenis data dalam Power Apps dan jenis data JSON terkait dan cara mengkonversinya.

Tipe data Contoh JSON Description Contoh konversi
Boolean { "bool": true } Boolean adalah jenis eksplisit dalam JSON dan dapat langsung dikonversi. Boolean( ParseJSON("{ ""bool"": true }").bool )
Warna { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
Tidak ada jenis warna di JSON. Nilai warna dapat dibuat dari bilangan bulat RGBA atau string heksadesimal. 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 ) )
Mata uang, Angka { "numbervalue": 123.5 } Angka dinyatakan secara langsung dalam JSON dengan tanda titik ( . ) sebagai pemisah desimal. Nilai( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue )
Tanggal, TanggalWaktu, Waktu { "start": "2022-05-10" }
{ "start": "23:12:49.000" }
JSON tidak memiliki tanggal atau jenis waktu sehingga hanya dapat menyatakan tanggal dan waktu sebagai string. Nilai dinamis dapat langsung dikonversi dari string dalam format ISO 8601 ke tanggal, waktu, atau tanggalwaktu. Untuk format lain, konversi terlebih dulu bidang JSON ke teks menggunakan fungsi Text(), lalu gunakan fungsi DateValue(), TimeValue() atau DateTimeValue() yang secara default akan menggunakan bahasa pengaturan pengguna saat ini. DateValue( ParseJSON("{ ""appointment"": ""2022-05-10"" }").appointment )
DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment )
GUID { "id": "123e4567-e89b-12d3-a456-426655440000" } JSON tidak memiliki jenis data untuk GUId sehingga hanya dapat dinyatakan sebagai string. GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id )
HyperLink, Gambar, Media { "URI": "https://northwindtraders.com/logo.jpg" } Jenis data tersebut adalah jenis data teks, dan dapat dikonversi ke teks dan kemudian digunakan di Power Apps. Teks( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }"). URI )
Pilihan { "status": 1 }
{ "status": "Closed" }
Pilihan disajikan sebagai string yang dilokalkan, yang didukung oleh angka. Fungsi JSON() membuat serial pilihan untuk nomor dukungannya. Tidak ada konversi langsung dari angka atau string ke pilihan, namun fungsi Switch() atau If() dapat digunakan pada teks atau nilai angka. Switch( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed )
Rekaman { "field": "value" } Tidak ada konversi langsung dari objek JSON ke struktur rekaman, tetapi bidang individual dapat diambil dari nilai Dinamis untuk membentuk rekaman. { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) }
Referensi rekaman t/a Referensi rekaman bersifat unik untuk sumber daya data dan tidak dapat diserialisasi atau tidak diserialisasi. Nilai bidang yang menyatakan kunci unik dapat digunakan di JSON untuk mengidentifikasi rekaman yang kemudian dapat dicari. t/a
Table [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
JSON dapat berisi larik, yang dapat dikonversi menjadi tabel. Nilai ini dapat merupakan larik rekaman, atau larik nilai yang secara efektif merupakan tabel kolom tunggal. ParseJSON() array hanya dapat dikonversi menjadi tabel kolom tunggal dari nilai Dinamis , dan dapat digunakan seperti itu atau dikonversi ke tabel rekaman yang ditik menggunakan ForAll(). ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } )
SMS { "stringField": "this is text" } Text adalah jenis eksplisit dalam JSON dan dapat langsung dikonversi. Text( ParseJSON( "{ ""stringField"": ""this is text"" }").stringField )
Dua pilihan { "available": true }
{ "available": "Yes" }
Dua opsi disajikan sebagai string yang dilokalkan, yang didukung oleh Boolean. Fungsi JSON() membuat dua pilihan ke nilai boolean-nya. Tidak ada konversi langsung dari boolean, angka atau string ke dua pilihan, namun fungsi Switch() atau If() dapat digunakan pada teks, angka, atau nilai boolean. Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes )

Contoh

mengakses Nilai Bidang

Dengan string JSON berikut dalam variabel bernama JsonString

{ "parent": { "child": "text value" }, "number": 567 }
  1. Rumus berikut menghasilkan teks text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. Rumus berikut menghasilkan angka 567:
    Value( ParseJSON( JsonString ).number )
    

Jika nama bidang terdiri dari nama pengidentifikasi tidak valid, Anda dapat memasukkan nama bidang dalam satu kuotasi. Dengan string JSON berikut dalam variabel bernama JsonString

{ "0": { "child-field": "text value" } }
  1. Rumus berikut menghasilkan teks text value:
    Text( ParseJSON( JsonString ).'0'.'child-field' )
    

Kosong

Dengan string JSON berikut dalam variabel bernama JsonString

{ "text": "text value" , "number": 567, "empty": null }
  1. Mencoba mengakses bidang yang tidak ada akan menghasilkan Blank(). rumus berikut ini menghasilkan true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. Nilai JSON null dianggap Blank(). rumus berikut ini menghasilkan true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Larik Sederhana

Dengan string JSON berikut dalam variabel bernama JsonString

{ "array": [1, 2, 3] }
  1. Mengakses angka kedua dalam tabel kolom tunggal nilai Dinamis bidang array dan mengonversi ke angka menggunakan Value() mengembalikan 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Mengonversi tabel kolom tunggal dari nilai dinamis di bidang array, menjadi satu tabel kolom angka { Value: 1 }, { Value: 2 }, { Value: 3 }:
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

Larik rekaman

Dengan string JSON berikut dalam variabel bernama JsonString

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. Mengonversi ke tabel rekaman yang ditik langsung dengan ForAll() dapat dilakukan dengan menggunakan ThisRecord.[fieldname] untuk mengakses bidang dinamis dan mengonversinya ke jenis tertentu:

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

larik ke tabel

  1. Mengonversi nilai dinamis ke tabel dengan menggunakan fungsi Table() menghasilkan tabel kolom tunggal dari nilai dinamis . Objek harus diakses menggunakan kolom Value (tunggal) dan dikonversi ke jenis seperti dijelaskan sebelumnya.

Dengan string JSON berikut dalam variabel bernama JsonString

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

Table() mengembalikan tabel kolom tunggal dari nilai dinamis dengan Nilai kolom tunggal untuk angka dalam array...

 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() mengembalikan tabel kolom tunggal dari nilai dinamis yang mewakili setiap objek json dalam array.

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