ฟังก์ชัน ParseJSON
ใช้กับ: แอปพื้นที่ทำงาน แอปแบบจำลอง Power Pages Power Platform CLI
ตีความสตริง JSON และส่งคืน ออบเจ็กต์ที่ไม่ได้ระบุชนิด หรือออบเจ็กต์ที่ระบุชนิด
สำคัญ
- การใช้อาร์กิวเมนต์ที่สองกับ ParseJSON เพื่อแปลงเป็นออบเจ็กต์ที่ระบุชนิดเป็นคุณลักษณะทดลอง
- คุณลักษณะทดลองไม่ได้มีไว้สำหรับการนำไปใช้งานจริงและอาจมีการจำกัดฟังก์ชันการทำงาน คุณลักษณะเหล่านี้สามารถใช้ได้ก่อนการเปิดตัวอย่างเป็นทางการเพื่อให้คุณสามารถเข้าใช้งานได้ก่อนเวลาและให้ข้อคิดเห็น ข้อมูลเพิ่มเติม: ทำความเข้าใจคุณลักษณะทดลอง แสดงตัวอย่าง และเลิกใช้แล้วในแอปพื้นที่ทำงาน
- ลักษณะการทำงานที่อธิบายในบทความนี้ใช้ได้เฉพาะเมื่อคุณเปิดคุณลักษณะทดลอง ชนิดที่ผู้ใช้กำหนด ใน การตั้งค่า > คุณลักษณะที่กำลังจะมา > การทดลอง (ปิดอยู่โดยค่าเริ่มต้น)
- ความคิดเห็นของคุณมีค่ามากสำหรับเรา โปรดแจ้งให้เราทราบว่าคุณคิดอย่างไรใน ฟอรัมชุมชนคุณลักษณะทดลองของ Power Apps
Description
ฟังก์ชัน ParseJSON แยกวิเคราะห์สตริง JSON ที่ถูกต้องและส่งคืน ออบเจ็กต์ที่ไม่ได้ระบุชนิด ซึ่งแสดงถึงโครงสร้าง JSON
หรือใช้อาร์กิวเมนต์ที่สองเพื่อแปลง JSON เป็นออบเจ็กต์ที่ระบุชนิดซึ่งสามารถใช้โดยตรงในสูตร Power Fx ทำให้ผลลัพธ์ง่ายต่อการใช้เนื่องจากไม่จำเป็นต้องการแปลงและการบังคับในจุดใช้งานอีกต่อไป JSON ที่ไม่ได้พิมพ์จะถูกแมปกับประเภทด้วยกฎเหล่านี้:
- คอลัมน์ในชนิดที่ไม่มีอยู่ใน JSON จะถูกเติมด้วย ช่องว่าง
- คอลัมน์ใน JSON ที่ไม่มีอยู่ในประเภทจะถูกละเว้น
- คอลัมน์ที่มีทั้งชนิดและ JSON ค่า JSON จะต้องแปลงเป็นชนิดได้
ฟังก์ชัน ParseJSON สามารถส่งคืนข้อผิดพลาดได้หากข้อความไม่ใช่ JSON ที่ถูกต้องตามรูปแบบ JavaScript Object Notation (JSON) ที่อธิบายไว้ใน ECMA-404 และ IETF RFC 8259
ไวยากรณ์
ParseJSON( JSONString [ , Type ] )
- JSONString – จำเป็น โครงสร้าง JSON ที่แสดงเป็นข้อความ
- ชนิด - ไม่บังคับ ข้อกำหนดชนิด Power Fx สำหรับโครงสร้าง JSON หากไม่มีอาร์กิวเมนต์นี้ ParseJSON จะส่งคืนออบเจ็กต์ที่ไม่ได้ระบุชนิด หากมี ฟังก์ชันจะส่งคืนออบเจ็กต์ที่ระบุชนิด
การแปลงชนิดข้อมูลออบเจ็กต์ไม่ระบุชนิด
หากไม่มีอาร์กิวเมนต์ที่สอง ParseJSON จะส่งคืน ออบเจ็กต์ที่ไม่ได้ระบุชนิด ซึ่งจำเป็นต้องแปลงค่าฟิลด์โดยตรงในชนิดข้อมูลที่รองรับ ตารางต่อไปนี้แสดงรายการ ชนิดข้อมูล ใน Power Apps และชนิดข้อมูล JSON ที่เกี่ยวข้องและวิธีการแปลง
ชนิดข้อมูล | ตัวอย่าง JSON | Description | ตัวอย่างการแปลง |
---|---|---|---|
Boolean | { "bool": true } |
บูลีนเป็นชนิดที่ชัดเจนใน JSON และสามารถแปลงได้โดยตรง | Boolean( ParseJSON("{ ""bool"": true }").bool ) |
Color | { "color": "#102030" } { "r": 255, "g": 128, "b": 0, "a": 0.5 } |
ไม่มีชนิดสีใน JSON ค่าสีสามารถสร้างได้จากจำนวนเต็ม RGBA หรือสตริงเลขฐานสิบหก |
ColorValue( ParseJSON( "{ ""สี"": ""#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 ) ) ) |
สกุลเงิน, ตัวเลข | { "numbervalue": 123.5 } |
ตัวเลขจะแสดงโดยตรงใน JSON ที่มีจุด ( . ) เป็นตัวคั่นทศนิยม | Value( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue ) |
วันที่, วันที่เวลา, เวลา | { "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 ) |
ชุดตัวเลือก | { "status": 1 } { "status": "Closed" } |
ตัวเลือกนำเสนอเป็นสตริงที่แปลเป็นภาษาท้องถิ่นที่มีตัวเลขรองรับ ฟังก์ชัน JSON() ซีเรียลไลซ์ตัวเลือกให้เป็นหมายเลขสำรอง ไม่มีการแปลงโดยตรงจากตัวเลขหรือสตริงเป็นตัวเลือก แต่ฟังก์ชัน Switch() หรือ If() สามารถใช้กับค่าข้อความหรือตัวเลขได้ | Switch( Value( ParseJSON( "{ ""สถานะ"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed ) |
เรกคอร์ด | { "field": "value" } |
ไม่มีการแปลงโดยตรงจากออบเจ็กต์ JSON เป็นโครงสร้างเรกคอร์ด แต่สามารถดึงข้อมูลแต่ละฟิลด์ได้จาก ออบเจ็กต์ไม่ระบุชนิด เพื่อสร้างเรกคอร์ดได้ | { field: Text( ParseJSON( "{ ""ฟิลด์"": ""ค่า"" }" ).field ) } |
การอ้างอิงเรกคอร์ด | ไม่มีข้อมูล | การอ้างอิงเรกคอร์ดเป็นข้อมูลเฉพาะสำหรับแหล่งข้อมูล และไม่สามารถซีเรียลไลซ์หรือยกเลิกการซีเรียลไลซ์ ค่าฟิลด์ที่แสดงคีย์เฉพาะสามารถใช้ใน JSON เพื่อระบุเรกคอร์ดที่สามารถค้นหาได้ | ไม่มีข้อมูล |
Table | [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ] [1, 2, 3] |
JSON สามารถมีอาร์เรย์ซึ่งสามารถแปลงเป็นตารางได้ ค่าเหล่านี้อาจเป็นอาร์เรย์ของเรกคอร์ด หรืออาร์เรย์ของค่าที่เป็นตารางแบบคอลัมน์เดียวได้อย่างมีประสิทธิภาพ อาร์เรย์ ParseJSON() สามารถแปลงเป็นตารางแบบคอลัมน์เดียวของ ออบเจ็กต์ไม่ระบุชนิด และสามารถใช้เป็นรูปแบบนั้นหรือแปลงเป็นตารางที่ระบุชนิดโดยใช้ ForAll() | ForAll( Table( ParseJSON( "[ { ""id"": 1, ""ชื่อ"": ""หนึ่ง"" }, { ""id"": 2, ""ชื่อ"": ""สอง"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } ) |
ข้อความ | { "stringField": "this is text" } |
ข้อความเป็นชนิดที่ชัดเจนใน JSON และสามารถแปลงได้โดยตรง | Text( ParseJSON( "{ ""stringField"": ""นี่คือข้อความ"" }").stringField ) |
สองตัวเลือก | { "available": true } { "available": "Yes" } |
สองตัวเลือกนำเสนอเป็นสตริงที่แปลเป็นภาษาท้องถิ่นใน โดยมีบูลีนรองรับ ฟังก์ชัน JSON() ซีเรียลไลซ์สองตัวเลือกให้เป็นค่าแบบบูลีน ไม่มีการแปลงโดยตรงจากแบบบูลีน ตัวเลขหรือสตริงเป็นสองตัวเลือก แต่ฟังก์ชัน Switch() หรือ If() สามารถใช้กับค่าข้อความ ตัวเลข หรือค่าแบบบูลีนได้ | Switch( Boolean( ParseJSON( "{ ""มีอยู่"": จริง }" ).available ), false, Availability.No, true, Availability.Yes ) |
ตัวอย่าง
การเข้าถึงค่าฟิลด์
รับสตริง 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' )
ว่างเปล่า
รับสตริง 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 ) )
อาร์เรย์แบบง่าย
รับสตริง 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 )