Json.Document ใช้สำหรับแปลง JSON text หรือ binary data ให้เป็น Power Query record ทำให้คุณสามารถเข้าถึง field แต่ละตัวได้อย่างง่ายดาย
= Json.Document(jsonText, optional encoding)
= Json.Document(jsonText, optional encoding)
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| jsonText | Text หรือ Binary | Yes | JSON content ที่ต้องการแปลง อาจเป็น text string หรือ binary data จาก File.Contents หรือ Web.Contents | |
| encoding | TextEncoding.Type | Optional | TextEncoding.Utf8 | Encoding ของ JSON document (เช่น TextEncoding.Utf8, TextEncoding.Utf16) ถ้าไม่ระบุ Power Query จะใช้ UTF-8 โดยอัตโนมัติ |
let JsonText = "{\"name\": \"สมชาย\", \"age\": 28, \"city\": \"กรุงเทพ\"}", Parsed = Json.Document(JsonText) in Parsedlet
JsonText = "{\"name\": \"สมชาย\", \"age\": 28, \"city\": \"กรุงเทพ\"}",
Parsed = Json.Document(JsonText)
in
Parsed
Record: [name = "สมชาย", age = 28, city = "กรุงเทพ"]
let JsonArray = "[{\"id\": 1, \"product\": \"Laptop\"}, {\"id\": 2, \"product\": \"Mouse\"}]", ParsedList = Json.Document(JsonArray), ConvertedTable = Table.Fro…let
JsonArray = "[{\"id\": 1, \"product\": \"Laptop\"}, {\"id\": 2, \"product\": \"Mouse\"}]",
ParsedList = Json.Document(JsonArray),
ConvertedTable = Table.FromList(ParsedList, Splitter.SplitByNothing(), {\"Data\"})
in
ConvertedTable
ตาราง 2 แถว แต่ละแถวเป็น record ที่มี field id และ product
let JsonFile = File.Contents("C:\\Data\\Products.json"), Parsed = Json.Document(JsonFile) in Parsedlet
JsonFile = File.Contents("C:\\Data\\Products.json"),
Parsed = Json.Document(JsonFile)
in
Parsed
Record หรือ List ที่มาจากไฟล์ Products.json
let ApiUrl = "https://api.example.com/users", Response = Web.Contents(ApiUrl, [Headers=[#\"Authorization\"=\"Bearer token123\"]]), Parsed = Json.Document(Respon…let
ApiUrl = "https://api.example.com/users",
Response = Web.Contents(ApiUrl, [Headers=[#\"Authorization\"=\"Bearer token123\"]]),
Parsed = Json.Document(Response),
UserTable = Table.FromList(Parsed, Splitter.SplitByNothing(), {\"User\"})
in
UserTable
ตารางของ user records จาก API
let JsonBinary = File.Contents("C:\\Data\\Unicode.json"), Parsed = Json.Document(JsonBinary, TextEncoding.Utf16) in Parsedlet
JsonBinary = File.Contents("C:\\Data\\Unicode.json"),
Parsed = Json.Document(JsonBinary, TextEncoding.Utf16)
in
Parsed
Record ที่ parsed จาก JSON file ที่เข้ารหัสเป็น UTF-16
Json.Document คือการแปลง JSON text/binary เป็น record (parsing) ส่วน Json.FromValue คือการแปลง Power Query record/list เป็น JSON text (serializing) ตรงกันข้ามเลย
Power Query จะ throw error แล้วบอกว่าตำแหน่งไหนใน JSON ที่มี syntax error เช่น missing quote หรือ comma ที่ไม่ครบ ต้องแก้ JSON format ให้ถูกต้องก่อน
ได้เลย Json.Document จะ parse nested objects และ arrays ให้เป็น nested records และ lists ในภายหลังคุณสามารถใช้ record access syntax หรือ Table.ExpandRecordColumn เพื่อ expand nested data
ไม่จำเป็น Json.Document สามารถรับ JSON text string โดยตรง หรือ binary data ก็ได้ ใช้กับ Web.Contents หรือ File.Contents เพราะว่ามันสะดวก แต่ถ้า JSON text อยู่ในคอลัมน์ของตาราง ก็สามารถ parse ได้เช่นเดียวกัน
Json.Document เป็นฟังก์ชั่นสำหรับแปลง JSON content ให้เป็น Power Query data structure (record หรือ list) ทำให้คุณสามารถทำงานกับ JSON data ได้ในลักษณะเดียวกับการทำงานกับตาราง
ที่เจ๋งคือ Json.Document ทำให้คุณไม่ต้องแยก JSON ด้วยตัวเองใช้ text functions หรือ regex อีกต่อไป แค่ pass JSON text เข้า Json.Document มันก็จะ handle ทั้งหมดให้ คุณจะได้ record สะอาดๆ พร้อมใช้งาน
ส่วนตัวผมใช้ Json.Document กับ Web.Contents เสมอเวลาที่ต้อง call REST API ที่ return JSON แบบนี้ Json.Document(Web.Contents(url)) ก็ได้ record พร้อมใช้แล้ว ข้อดีคือมันไม่ต้องพึ่ง external library ใดๆ ถือว่าสะดวกมาก 😎