Kongsi melalui


ParseJSON Fungsi

Terpakai kepada: Apl kanvas Copilot Studio Apl dipacu model Power Platform CLI Fungsi Dataverse Power Pages

Mentafsir rentetan JSON dan mengembalikan nilai Dinamik atau nilai ditaip tertentu jika jenis disediakan.

Penting

Description

Fungsi menghuraikan ParseJSON rentetan JSON yang sah dan mengembalikan nilai Dinamik yang mewakili struktur JSON.

Secara pilihan, gunakan hujah kedua untuk menukar JSON kepada objek yang ditaip yang boleh digunakan secara langsung dalam Power Fx formula. Ini menjadikan hasilnya lebih mudah digunakan kerana penukaran dan paksaan pada titik penggunaan tidak lagi diperlukan. JSON yang tidak ditaip dipetakan kepada jenis dengan peraturan ini:

  • Lajur dalam jenis yang tidak terdapat dalam JSON diisi dengan kosong.
  • Lajur dalam JSON yang tidak terdapat dalam jenis diabaikan.
  • Lajur yang kedua-duanya dalam jenis dan JSON, nilai JSON mesti dipaksa kepada jenis.

Fungsi ini ParseJSON boleh mengembalikan ralat jika teks bukan JSON yang sah mengikut format Notasi Objek JavaScript (JSON) yang diterangkan dalam ECMA-404 dan IETF RFC 8259.

Sintaks

ParseJSON( JSONString [ , Taip ] )

  • JSONString – Diperlukan. Struktur JSON mewakili sebagai teks.
  • Jenis - Pilihan. Takrifan Power Fx jenis untuk struktur JSON. Tanpa hujah ini, ParseJSON mengembalikan nilai dinamik; dengannya fungsi mengembalikan nilai ditaip tertentu.

Menukar nilai Dinamik

Tanpa hujah kedua, ParseJSON mengembalikan nilai Dinamik yang memerlukan penukaran eksplisit nilai medan dalam jenis data yang disokong. Jadual berikut menyenaraikan jenis data dalam Power Apps dan jenis data JSON sepadan dan cara untuk menukarnya.

Jenis data Contoh JSON Description Penukaran contoh
Boolean { "bool": true } Boolean ialah jenis eksplisit dalam JSON dan boleh ditukar secara terus. Boolean( ParseJSON("{ ""bool"": benar }").bool )
Warna { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
Tiada jenis warna dalam JSON. Nilai warna boleh dicipta daripada integer RGBA atau rentetan perenambelas. 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 Wang, Nombor { "numbervalue": 123.5 } Nombor diwakili secara terus dalam JSON dengan noktah ( . ) sebagai pemisah perpuluhan. Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue )
Tarikh, Tarikh/Masa, Masa { "start": "2022-05-10" }
{ "start": "23:12:49.000" }
JSON tidak mempunyai jenis tarikh atau masa jadi hanya boleh mewakili tarikh dan masa sebagai rentetan. Nilai dinamik boleh ditukar terus daripada rentetan dalam format ISO 8601 kepada tarikh, masa atau tarikhmasa. Untuk format lain, tukarkan medan JSON kepada teks dahulu menggunakan fungsi Teks() dan kemudian gunakan fungsi DateValue(), TimeValue() atau DateTimeValue() yang secara lalai akan menggunakan tetapan pengguna semasa. DateValue( ParseJSON("{ ""appointment"": ""2022-05-10"" }").appointment )
DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment ) ) )
GUID { "id": "123e4567-e89b-12d3-a456-426655440000" } JSON tidak mempunyai jenis data untuk GUIds jadi ia hanya boleh diwakili sebagai rentetan. GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id )
HiperPautan, Imej, Media { "URI": "https://northwindtraders.com/logo.jpg" } Jenis data ini ialah jenis data teks dan boleh ditukar kepada teks dan kemudian digunakan dalam Power Apps. Text( ParseJSON("{ ""URI"": ";https://northwindtraders.com/logo.jpg"" }"). URI )
Pilihan { "status": 1 }
{ "status": "Closed" }
Pilihan dipaparkan sebagai rentetan disetempatkan, disokong oleh nombor. Fungsi JSON() mensirikan pilihan kepada nombor sokongannya. Tiada penukaran langsung daripada nombor atau rentetan kepada pilihan, tetapi fungsi Tukar() atau Jika() boleh digunakan pada nilai teks atau nombor. Switch( Value( ParseJSON( "{ "status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed )
Rekod { "field": "value" } Tiada penukaran terus daripada objek JSON kepada struktur rekod, tetapi medan individu boleh diambil daripada nilai Dinamik untuk membentuk rekod. { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) }
Rujukan Rekod t/b Rujukan rekod adalah unik untuk sumber data dan tidak boleh disirikan atau dinyahsiri. Nilai medan yang mewakili kunci unik boleh digunakan dalam JSON untuk mengenal pasti rekod yang kemudian boleh dicari. t/b
Table [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
JSON boleh mengandungi tatasusunan yang boleh ditukar kepada jadual. Nilai ini boleh jadi tatasusunan rekod atau tatasusunan nilai yang merupakan jadual lajur tunggal secara berkesan. ParseJSON() tatasusunan hanya boleh ditukar kepada jadual lajur tunggal nilai Dinamik , dan boleh digunakan seperti itu atau ditukar kepada jadual rekod yang ditaip menggunakan ForAll(). ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } )
Teks { "stringField": "this is text" } Teks ialah jenis eksplisit dalam JSON dan boleh ditukar secara terus. Text( ParseJSON( "{ ""stringField"": ""this is text"" }").stringField )
Dua pilihan { "available": true }
{ "available": "Yes" }
Dua pilihan dipaparkan sebagai rentetan disetempatkan, disokong oleh boolean. Fungsi JSON() mensirikan dua pilihan kepada nilai booleannya. Tiada penukaran langsung daripada boolean, nombor atau rentetan kepada dua pilihan, tetapi fungsi Tukar() atau Jika() boleh digunakan pada nilai teks, nombor atau boolean. Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes )

Contoh

Mengakses nilai medan

Memandangkan rentetan JSON berikut dalam pemboleh ubah yang dinamakan JsonString

{ "parent": { "child": "text value" }, "number": 567 }
  1. Formula berikut mengembalikan teks text value:
    Text( ParseJSON( JsonString ).parent.child )
    
  2. Formula berikut mengembalikan nombor 567:
    Value( ParseJSON( JsonString ).number )
    

Sekiranya nama medan terdiri daripada nama pengecam tidak sah, anda boleh meletakkan nama medan dalam sebut harga tunggal. Memandangkan rentetan JSON berikut dalam pemboleh ubah yang dinamakan JsonString

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

Kosong

Memandangkan rentetan JSON berikut dalam pemboleh ubah yang dinamakan JsonString

{ "text": "text value" , "number": 567, "empty": null }
  1. Percubaan untuk mengakses medan tidak wujud mengembalikan Kosong(). Formula berikut mengembalikan true:
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. Nilai JSON null dianggap sebagai Kosong(). Formula berikut mengembalikan true:
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

Tatasusunan Ringkas

Memandangkan rentetan JSON berikut dalam pemboleh ubah yang dinamakan JsonString

{ "array": [1, 2, 3] }
  1. Mengakses nombor kedua dalam jadual lajur tunggal medan tatasusunan bagi nilai Dinamik dan menukar kepada nombor menggunakan Value() mengembalikan 2:
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. Menukar jadual lajur tunggal nilai dinamik dalam medan tatasusunan, kepada jadual lajur tunggal nombor { Value: 1 }, { Value: 2 }, { Value: 3 }:
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

Tatasusunan Rekod

Memandangkan rentetan JSON berikut dalam pemboleh ubah yang dinamakan JsonString

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. Menukar kepada jadual rekod yang ditaip secara langsung dengan ForAll() boleh dilakukan dengan menggunakan ThisRecord.[fieldname] untuk mengakses medan dinamik dan menukarnya kepada jenis tertentu:

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

Tatasusunan kepada Jadual

  1. Menukar nilai dinamik kepada jadual dengan menggunakan fungsi Table() menghasilkan jadual satu lajur nilai dinamik . Objek kemudian perlu diakses menggunakan lajur (tunggal) Value dan ditukar kepada jenis yang diterangkan sebelum ini.

Memandangkan rentetan JSON berikut dalam pemboleh ubah yang dinamakan JsonString

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

Table() mengembalikan jadual lajur tunggal bagi nilai dinamik dengan Nilai lajur tunggal untuk nombor dalam tatasusunan...

 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 jadual lajur tunggal nilai dinamik yang mewakili setiap objek json dalam tatasusunan.

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