หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
นําไปใช้กับ: แอปพื้นที่ทํางาน
แอปที่ขับเคลื่อนด้วยแบบจําลอง Copilot Studio
ฟังก์ชัน
Power Platform CLI
Dataverse
Power Pages
ตีความสตริง JSON และส่งกลับ ค่าไดนามิก หรือค่าพิมพ์เฉพาะถ้ามีการระบุชนิด
Description
ฟังก์ชัน ParseJSON แยกวิเคราะห์สตริง JSON ที่ถูกต้องและแสดงค่า ไดนามิก ที่แสดงโครงสร้าง JSON
หรือใช้อาร์กิวเมนต์ที่สองเพื่อแปลง JSON เป็นออบเจ็กต์ที่ระบุชนิดซึ่งสามารถใช้โดยตรงในสูตร Power Fx ทำให้ผลลัพธ์ง่ายต่อการใช้เนื่องจากไม่จำเป็นต้องการแปลงและการบังคับในจุดใช้งานอีกต่อไป JSON ที่ไม่ได้พิมพ์จะถูกแมปกับประเภทด้วยกฎเหล่านี้:
- คอลัมน์ในชนิดที่ไม่มีอยู่ใน JSON จะถูกเติมด้วย ช่องว่าง
- คอลัมน์ใน JSON ที่ไม่มีอยู่ในประเภทจะถูกละเว้น
- คอลัมน์ที่มีทั้งชนิดและ JSON ค่า JSON จะต้องแปลงเป็นชนิดได้
ฟังก์ชันParseJSONสามารถส่งกลับข้อผิดพลาดถ้าข้อความไม่ถูกต้อง JSON ตามรูปแบบ JavaScript Object Notation (JSON) ที่อธิบายไว้ใน ECMA-404 และ IETF RFC 8259
Syntax
ParseJSON( JSONString [ , ประเภท ] )
- JSONString – จำเป็น โครงสร้าง JSON ที่แสดงเป็นข้อความ
- ชนิด - ไม่บังคับ ข้อกำหนดชนิด Power Fx สำหรับโครงสร้าง JSON หากไม่มีอาร์กิวเมนต์ ParseJSON นี้ จะส่งกลับค่าไดนามิก โดยที่ฟังก์ชันจะส่งกลับค่าชนิดเฉพาะ
การแปลงค่าไดนามิก
หากไม่มีอาร์กิวเมนต์ ParseJSON ที่สอง ระบบจะแสดง ค่าไดนามิก ซึ่งจําเป็นต้องมีการแปลงค่าเขตข้อมูลอย่างชัดเจนในชนิดข้อมูลที่ได้รับการสนับสนุน ตารางต่อไปนี้แสดงรายการ ชนิดข้อมูล ใน Power Apps และชนิดข้อมูล JSON ที่เกี่ยวข้องและวิธีการแปลง
| Data type | JSON examples | Description | Example conversion |
|---|---|---|---|
| แบบบูลีน | { "bool": true } |
บูลีนเป็นชนิดที่ชัดเจนใน JSON และสามารถแปลงได้โดยตรง | Boolean( ParseJSON("{ ""bool": true }").bool ) |
| Color | { "color": "#102030" }{ "r": 255, "g": 128, "b": 0, "a": 0.5 } |
ไม่มีชนิดสีใน JSON ค่าสีสามารถสร้างได้จากจำนวนเต็ม RGBA หรือสตริงเลขฐานสิบหก |
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 ) ) ) |
| Currency, Number | { "numbervalue": 123.5 } |
ตัวเลขจะแสดงโดยตรงใน JSON ที่มีจุด ( . ) เป็นตัวคั่นทศนิยม | ค่า ( ParseJSON( "{ ""ค่าตัวเลข"": 123.5 }").ค่า ) |
| วันที่, วันที่เวลา, เวลา | { "start": "2022-05-10" }{ "start": "23:12:49.000" } |
JSON ไม่มีชนิดวันที่หรือเวลา จึงสามารถแสดงวันที่และเวลาเป็นสตริงได้เท่านั้น ค่าไดนามิกสามารถแปลงได้โดยตรงจากสตริงในรูปแบบ ISO 8601 เป็นวันที่ เวลา หรือวันที่เวลา สำหรับรูปแบบอื่นๆ ให้แปลงฟิลด์ JSON เป็นข้อความก่อนโดยใช้ฟังก์ชัน Text() แล้วใช้ฟังก์ชัน DateValue(), TimeValue() หรือ DateTimeValue() ซึ่งโดยค่าเริ่มต้นจะใช้ภาษาของการตั้งค่าปัจจุบันของผู้ใช้ |
DateValue( ParseJSON("{ ""การนัดหมาย"": ""2022-05-10"" }").appointment ) DateValue( Text( ParseJSON("{ ""นัดหมาย"": ""5 พฤษภาคม 2022"" }").appointment ) ) |
| GUID | { "id": "123e4567-e89b-12d3-a456-426655440000" } |
JSON ไม่มีชนิดข้อมูลสำหรับ GUID จึงสามารถแสดงเป็นสตริงได้เท่านั้น | GUID( ParseJSON("{ ""id": ""123e4567-e89b-12d3-a456-426655440000"" }").id ) |
| ไฮเปอร์ลิงก์, รูปภาพ, สื่อ | { "URI": "https://northwindtraders.com/logo.jpg" } |
ชนิดข้อมูลเหล่านี้เป็นชนิดข้อมูลข้อความและสามารถแปลงเป็นข้อความแล้วนำไปใช้ใน Power Apps | Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }") URI ) |
| Choice | { "status": 1 }{ "status": "Closed" } |
ตัวเลือกนำเสนอเป็นสตริงที่แปลเป็นภาษาท้องถิ่นที่มีตัวเลขรองรับ ฟังก์ชัน JSON() ซีเรียลไลซ์ตัวเลือกให้เป็นหมายเลขสำรอง ไม่มีการแปลงโดยตรงจากตัวเลขหรือสตริงเป็นตัวเลือก แต่ฟังก์ชัน Switch() หรือ If() สามารถใช้กับค่าข้อความหรือตัวเลขได้ | Switch( Value( ParseJSON"{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed ) |
| Record | { "field": "value" } |
ไม่มีการแปลงโดยตรงจากออบเจ็กต์ JSON เป็นโครงสร้างเรกคอร์ด แต่สามารถดึงข้อมูลเขตข้อมูลแต่ละรายการจากค่า ไดนามิก เพื่อสร้างเรกคอร์ด | { field: Text( ParseJSON("{ ""field"": ""value"" }" ).field ) } |
| Record Reference | n/a | การอ้างอิงเรกคอร์ดเป็นข้อมูลเฉพาะสำหรับแหล่งข้อมูล และไม่สามารถซีเรียลไลซ์หรือยกเลิกการซีเรียลไลซ์ ค่าฟิลด์ที่แสดงคีย์เฉพาะสามารถใช้ใน JSON เพื่อระบุเรกคอร์ดที่สามารถค้นหาได้ | n/a |
| Table | [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ][1, 2, 3] |
JSON สามารถมีอาร์เรย์ซึ่งสามารถแปลงเป็นตารางได้ ค่าเหล่านี้อาจเป็นอาร์เรย์ของเรกคอร์ด หรืออาร์เรย์ของค่าที่เป็นตารางแบบคอลัมน์เดียวได้อย่างมีประสิทธิภาพ ParseJSON() อาร์เรย์สามารถแปลงเป็นตารางคอลัมน์เดียวของค่าไดนามิกเท่านั้น และสามารถใช้เช่นหรือแปลงเป็นตารางที่พิมพ์ของเรกคอร์ดโดยใช้ 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" } |
ข้อความเป็นชนิดที่ชัดเจนใน JSON และสามารถแปลงได้โดยตรง | Text( ParseJSON"{ ""stringField": ""this is"" }").stringField ) |
| Two options | { "available": true }{ "available": "Yes" } |
สองตัวเลือกนำเสนอเป็นสตริงที่แปลเป็นภาษาท้องถิ่นใน โดยมีบูลีนรองรับ ฟังก์ชัน JSON() ซีเรียลไลซ์สองตัวเลือกให้เป็นค่าแบบบูลีน ไม่มีการแปลงโดยตรงจากแบบบูลีน ตัวเลขหรือสตริงเป็นสองตัวเลือก แต่ฟังก์ชัน Switch() หรือ If() สามารถใช้กับค่าข้อความ ตัวเลข หรือค่าแบบบูลีนได้ | Switch( Boolean( ParseJSON( "{ """available"": true }" ).available ), false, Availability.No, true, Availability.Yes ) |
Examples
การเข้าถึงค่าฟิลด์
รับสตริง JSON ต่อไปนี้ในตัวแปรที่ชื่อ JsonString
{ "parent": { "child": "text value" }, "number": 567 }
- สูตรต่อไปนี้ส่งคืนข้อความ
text value:Text( ParseJSON( JsonString ).parent.child ) - สูตรต่อไปนี้ส่งคืนตัวเลข
567:Value( ParseJSON( JsonString ).number )
ในกรณีที่ชื่อฟิลด์ประกอบด้วยชื่อตัวระบุที่ไม่ถูกต้อง คุณสามารถใส่ชื่อฟิลด์ในเครื่องหมายคำพูดเดี่ยว
รับสตริง JSON ต่อไปนี้ในตัวแปรที่ชื่อ JsonString
{ "0": { "child-field": "text value" } }
- สูตรต่อไปนี้ส่งคืนข้อความ
text value:Text( ParseJSON( JsonString ).'0'.'child-field' )
Blanks
รับสตริง JSON ต่อไปนี้ในตัวแปรที่ชื่อ JsonString
{ "text": "text value" , "number": 567, "empty": null }
- ความพยายามที่จะเข้าถึงฟิลด์ที่ไม่มีอยู่ส่งคืน Blank() สูตรต่อไปนี้ส่งคืน
true:IsBlank( Text( ParseJSON( JsonString ).parent.child ) ) - ค่า
nullของ JSON ถือว่าเป็น Blank() สูตรต่อไปนี้ส่งคืนtrue:IsBlank( Text( ParseJSON( JsonString ).empty ) )
Simple Arrays
รับสตริง JSON ต่อไปนี้ในตัวแปรที่ชื่อ JsonString
{ "array": [1, 2, 3] }
- การเข้าถึงตัวเลขที่สองในตารางแบบคอลัมน์เดียวของค่า ไดนามิก ของเขตข้อมูลอาร์เรย์ และแปลงเป็นตัวเลขโดยใช้ Value() ส่งกลับ
2:Value( Index( ParseJSON( JsonString ).array, 2 ) ) - การแปลงตารางแบบคอลัมน์เดียวของค่า ไดนามิก ในฟิลด์อาร์เรย์ ให้เป็นตารางคอลัมน์เดียวของตัวเลข
{ Value: 1 }, { Value: 2 }, { Value: 3 }:ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
อาร์เรย์ของเรกคอร์ด
รับสตริง JSON ต่อไปนี้ในตัวแปรที่ชื่อ JsonString
{ "array": [
{ "id": 1, "name": "One"},
{ "id": 2, "name": "Two"}
] }
การแปลงเป็นตารางแบบพิมพ์ของเรกคอร์ดโดยตรงด้วย ForAll() สามารถทําได้โดยใช้
ThisRecord.[fieldname]เพื่อเข้าถึงเขตข้อมูล แบบไดนามิก และแปลงเป็นชนิดที่เฉพาะเจาะจง:ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
อาร์เรย์เป็นตาราง
- การแปลงค่าไดนามิกเป็นตารางโดยใช้ฟังก์ชัน Table() จะส่งผลให้มีตารางแบบคอลัมน์เดียวของค่าไดนามิก วัตถุจะต้องเข้าถึงได้โดยใช้คอลัมน์
Value(เดียว) และแปลงเป็นชนิดตามที่อธิบายไว้ก่อนหน้านี้
รับสตริง JSON ต่อไปนี้ในตัวแปรที่ชื่อ JsonString
{ "array": [1, 2, 3] }
Table() ส่งกลับตารางแบบคอลัมน์เดียวของค่า ไดนามิก ที่มีค่าคอลัมน์เดียวสําหรับตัวเลขในอาร์เรย์...
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() ส่งกลับตารางแบบคอลัมน์เดียวของค่า ไดนามิก ที่แสดงออบเจ็กต์ json แต่ละรายการในอาร์เรย์
Set(untypedTable, Table( ParseJSON( JsonString ).array ) );
Text( Index(untypedTable, 1).Value.name )