ค้นหาเว็บไซต์

รูปแบบ 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 สำหรับการปรับใช้ทรัพยากรโครงสร้างพื้นฐานจำนวนมากและรวดเร็ว

บทความที่เกี่ยวข้อง