รูปแบบ PowerShell JSON | ประเภท JSON ทำงานอย่างไรใน PowerShell
คำจำกัดความของรูปแบบ PowerShell JSON
รูปแบบ JSON ยังย่อมาจาก JavaScript Object Notation Format ซึ่งเป็นรูปแบบมาตรฐานแบบเปิดและอยู่ในรูปแบบที่มนุษย์สามารถอ่านได้ และส่วนใหญ่ใช้เพื่อการสื่อสารที่รวดเร็วยิ่งขึ้นระหว่างเบราว์เซอร์และไคลเอนต์ เนื่องจากง่ายต่อการประมวลผลและสามารถดึงข้อมูลเป็นข้อมูล PowerShell โดยใช้คำสั่งเว็บ เช่น Inviv- WebRequest และเรียกใช้-RestMethod แม้จะมีชื่อ แต่ภาษานี้ค่อนข้างแตกต่างจากรูปแบบ JavaScript
ไวยากรณ์:
ภาษา JSON ใช้ไวยากรณ์ด้านล่าง
{
"String":"Value"
}ข้างต้นคือไวยากรณ์อย่างง่ายของรูปแบบอ็อบเจ็กต์ JSON มีส่วนหัวของคุณสมบัติและค่า และทั้งสองคั่นด้วยเครื่องหมายทวิภาค ( : ) ซึ่งหมายความว่าส่วนหัวนั้นมีค่าเฉพาะนั้น
JSON array Syntax,
{
"String": [
Value1,
Value2
]
}
ไวยากรณ์ข้างต้นแสดงว่าส่วนหัวของคุณสมบัติ String มีค่าอาร์เรย์สองค่า คือ Value1 และ Value2
Complex JSON structure,
{
"String":[
{
"String1":"Value1",
"String2":"Value2"
},
{
"String3":"Value3",
"String4":[
"Value4",
"Value5"
]
}
]
}ไวยากรณ์ข้างต้นแสดงโครงสร้างที่ซับซ้อนของรูปแบบ JSON โดยมีการรวมกันของสตริงและค่า อาร์เรย์ และสตริงย่อยและค่าต่างๆ
ประเภท JSON ทำงานอย่างไรใน PowerShell
JavaScript Object Notation หรือไฟล์ JSON มีไวยากรณ์ .json ดังที่เราได้เห็นในส่วนไวยากรณ์ข้างต้นแล้วว่า JSON เป็นคู่ของสตริงและค่า และมีสตริงและค่าดังกล่าวหลายรายการเชื่อมโยงถึงกัน และยังประกอบด้วยอาร์เรย์และกลุ่มย่อยของสตริงและค่า และสามารถสร้างโครงสร้างที่ซับซ้อนได้ .
คุณสามารถเขียนไฟล์ JSON ในโปรแกรมแก้ไขใดก็ได้เนื่องจากเป็นรูปแบบข้อความธรรมดา แต่หากต้องการสร้างไฟล์ JSON ที่ปราศจากข้อผิดพลาด คุณสามารถใช้ VS Code ได้เนื่องจากจะแสดงข้อผิดพลาดเมื่อมีไวยากรณ์ขาดหายไป ประการที่สอง เมื่อคุณสร้างไฟล์ JSON เสร็จแล้ว คุณสามารถตรวจสอบไฟล์ JSON ออนไลน์ได้เช่นกัน เว็บไซต์หลายแห่งตรวจสอบไฟล์ JSON แต่ https://jsonlint.com/ เป็นเว็บไซต์ยอดนิยมในการตรวจสอบไฟล์ JSON ของคุณ
เมื่อสร้างและตรวจสอบไฟล์ JSON แล้ว งานของเราคืออ่านไฟล์ JSON ใน PowerShell PowerShell ใช้ cmdlets สองรายการ ConvertTo-JSON และ ConvertFrom-JSON เพื่อทำงานกับไฟล์ JSON
ConvertTo-JSON cmdlet จะแปลงเอาต์พุตที่เป็นไปได้เป็นรูปแบบ JSON และ ConvertFrom-JSON cmdlet จะแปลงอินพุต JSON เป็น Object ที่กำหนดเองหรือรูปแบบ hashtable ขั้นแรก เราจะตรวจสอบตัวอย่างไฟล์ JSON อินพุตที่สร้างขึ้นด้านบน และวิธีที่เราสามารถใช้คำสั่ง ConvertFrom-JSON
{
"Company":"AeroSpace",
"HeadOffice":"Russia",
"BranchOffices":[
"India",
"Australia"
]
}หากคุณกำลังทำงานกับไฟล์ JSON โดยตรง คุณสามารถใช้คำสั่งด้านล่างเพื่อรับเอาต์พุตเป็นรูปแบบแฮชได้
Get-Content .\Test1.json | ConvertFrom-Jsonเอาต์พุต:
หรือคุณสามารถใช้คำสั่งด้านล่างได้โดยตรงโดยไม่ต้องบันทึกไฟล์เป็น JSON
$jsoninput = '{
"Company":"AeroSpace",
"HeadOffice":"Russia",
"BranchOffices":[
"India",
"Australia"
]
}'
$jsoninput | ConvertFrom-Jsonเอาต์พุต:
หากต้องการแปลงเอาต์พุตเป็นรูปแบบ JSON คุณต้องใช้คำสั่ง ConvertTo-JSON ดังที่แสดงด้านล่าง
Get-Process notepad++ | Select Name, id, WorkingSet, CPU | ConvertTo-Jsonเอาต์พุต:
ในโครงสร้าง JSON ค่าบูลีน $true และ $false ถูกกำหนดให้เป็น true หรือ false ตามลำดับ ในขณะที่ $null ถูกกำหนดให้เป็น null ดูตัวอย่างด้านล่าง
Get-ChildItem -Path C:\Temp\25Aug2020.txt | ConvertTo-Jsonเอาต์พุต:
คุณสามารถเห็นในผลลัพธ์ด้านบนว่ามีการกำหนดค่า null และ true และรูปแบบวันที่ถูกกล่าวถึงด้วย /Date และเส้นทางถูกกำหนดไว้ในแบ็กสแลชคู่ (“\\ ” ) แทนที่จะเป็นแบ็กสแลชเดี่ยว
ตัวอย่าง
1. การแปลงเอาต์พุตคำสั่งเป็นไฟล์ JSON
เราสามารถแปลงเอาต์พุตคำสั่งเกือบทั้งหมดเป็นรูปแบบ JSON ได้โดยใช้คำสั่งไปป์ไลน์ ConvertTo-JSON ตัวอย่างเช่น,
Get-Process chrome | Select Name, ID, WorkingSet, CPU, PagedMemorySize64 | Select -First 3 | ConvertTo-Jsonเอาต์พุต:
คุณยังสามารถบีบอัดเอาต์พุตโดยใช้พารามิเตอร์ -บีบอัด เพื่อให้เอาต์พุตแสดงในบรรทัดเดียวดังที่แสดงด้านล่าง
Get-Process chrome | Select Name, ID, WorkingSet, CPU, PagedMemorySize64 | Select -First 3 | ConvertTo-Json -Compressเอาต์พุต:
2. การแปลงเอาต์พุต JSON เป็นอาร์เรย์
ในการแปลงเอาต์พุต JSON เป็นอาร์เรย์ เราจำเป็นต้องใช้พารามิเตอร์ -AsArray
โปรดทราบ: พารามิเตอร์นี้รองรับเฉพาะในเวอร์ชัน .Net Core (PowerShell 6.0 ขึ้นไป) แต่ไม่รองรับเวอร์ชันต่ำกว่า 6.0 (เวอร์ชัน .Net Framework)
โดยไม่ต้องแปลงเป็นอาร์เรย์
Get-Date | ConvertTo-Jsonเอาต์พุต:
หลังจากแปลงเป็นอาร์เรย์แล้ว
Get-Date | ConvertTo-Json -AsArrayเอาต์พุต:
จะมีการเพิ่มวงเล็บเหลี่ยมเมื่อคุณแปลงเอาต์พุต JSON เป็นอาร์เรย์
3. การใช้ Inrigg-Webrequest
คุณสามารถใช้คำสั่ง JSON เพื่อทำงานกับข้อมูลเอาต์พุตของเว็บไซต์ได้ ตัวอย่างเช่น เรามี URL https://www.reddit.com/r/todayilearned/top.json?limit=100 ซึ่งแสดงโพสต์ Reddit 100 อันดับแรกจากหน้าใดหน้าหนึ่งในรูปแบบ JSON
Invoke-WebRequest -Uri "https://www.reddit.com/r/todayilearned/top.json?limit=100" | ConvertFrom-Jsonเอาต์พุต:
หากต้องการอ่านชื่อเรื่องของเนื้อหาที่โพสต์เหล่านั้น
$Out = Invoke-WebRequest -Uri "https://www.reddit.com/r/todayilearned/top.json?limit=100" | ConvertFrom-Json
$out.data.children.data | Select Titleเอาต์พุต:
คำสั่งข้างต้นคล้ายกับคำสั่ง RestAPI ซึ่งจะจัดรูปแบบข้อมูลเอาต์พุต JSON ของเว็บโดยอัตโนมัติโดยไม่ต้องใช้คำสั่ง ConvertFrom-JSON ภายนอก
Invoke-RestMethod -Uri "https://www.reddit.com/r/todayilearned/top.json?limit=100"4. คำสั่ง JSON เพื่อแปลงเอาต์พุตเป็น HashTable
ด้วยคำสั่ง JSON เราสามารถแปลงเอาต์พุตของ cmdlets เป็น hashtable ได้โดยตรงดังที่แสดงด้านล่าง
Get-Service | ConvertTo-Json | ConvertFrom-Jsonเอาต์พุต:
คุณยังสามารถเลือกบางฟิลด์ได้
Get-Service | Select Name, Starttype, Status | ConvertTo-Json | ConvertFrom-Jsonบทสรุป
รูปแบบ JSON เหนือกว่าการใช้รูปแบบ XML เนื่องจากจัดการได้ง่ายกว่าและโหลดได้เร็วกว่าสำหรับเบราว์เซอร์สำหรับเว็บไซต์ที่ใช้เนื้อหาจำนวนมาก และรูปแบบนี้เบากว่ารูปแบบ XML มาก ไฟล์ JSON ยังมีประโยชน์ในการพัฒนาโครงสร้างพื้นฐานอัตโนมัติโดยใช้ประโยชน์จากโครงสร้างพื้นฐานเป็นรูปแบบโค้ด (IaaS) และใช้โดยเทคโนโลยีคลาวด์และ Azure เป็นหลักเพื่อทำงานร่วมกับเทมเพลต Azure DevOps และ ARM สำหรับการปรับใช้ทรัพยากรโครงสร้างพื้นฐานจำนวนมากและรวดเร็ว












