ConvertFrom-Json (Microsoft.PowerShell.Utility)
ConvertFrom-Json
- โมดูล :
- Microsoft.PowerShell.Utility
แปลงสตริงที่จัดรูปแบบ JSON เป็นวัตถุที่กำหนดเองหรือตารางแฮช
ไวยากรณ์
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]คำอธิบาย
ConvertFrom-Json cmdlet จะแปลงสตริงที่จัดรูปแบบ JavaScript Object Notation (JSON) เป็นวัตถุ PSObject หรือ Hashtable ที่กำหนดเองซึ่งมีคุณสมบัติสำหรับแต่ละฟิลด์ ในสตริง JSON โดยทั่วไปแล้วเว็บไซต์จะใช้ JSON เพื่อจัดเตรียมการแสดงออบเจ็กต์ที่เป็นข้อความ cmdlet จะเพิ่มคุณสมบัติให้กับออบเจ็กต์ใหม่ขณะที่ประมวลผลแต่ละบรรทัดของสตริง JSON
มาตรฐาน JSON อนุญาตให้มีชื่อคีย์ที่ซ้ำกัน ซึ่งห้ามใช้ในประเภท PSObject และ Hashtable ตัวอย่างเช่น หากสตริง JSON มีคีย์ที่ซ้ำกัน cmdlet นี้จะใช้เฉพาะคีย์สุดท้ายเท่านั้น ดูตัวอย่างอื่นๆ ด้านล่าง
หากต้องการสร้างสตริง JSON จากวัตถุใดๆ ให้ใช้ ConvertTo-Json cmdlet
cmdlet นี้ถูกนำมาใช้ใน PowerShell 3.0
บันทึก
เริ่มต้นด้วย PowerShell 6 cmdlet รองรับ JSON พร้อมความคิดเห็น ความคิดเห็น JSON เริ่มต้นด้วยอักขระเครื่องหมายทับสองตัว (//) ความคิดเห็น JSON ไม่ได้ถูกบันทึกในออบเจ็กต์ที่ส่งออกโดย cmdlet ก่อนหน้า PowerShell 6 ConvertFrom-Json จะส่งกลับข้อผิดพลาดเมื่อพบความคิดเห็น JSON
ตัวอย่าง
ตัวอย่างที่ 1: แปลงวัตถุ DateTime เป็นวัตถุ JSON
คำสั่งนี้ใช้ cmdlets ConvertTo-Json และ ConvertFrom-Json เพื่อแปลงอ็อบเจ็กต์ DateTime จาก Get-Date cmdlet ไปยังวัตถุ JSON จากนั้นไปที่ PSCustomObject
Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json
DisplayHint : 2
DateTime : Friday, January 13, 2012 8:06:31 PM
Date : 1/13/2012 8:00:00 AM
Day : 13
DayOfWeek : 5
DayOfYear : 13
Hour : 20
Kind : 2
Millisecond : 400
Minute : 6
Month : 1
Second : 31
Ticks : 634620819914009002
TimeOfDay : @{Ticks=723914009002; Days=0; Hours=20; Milliseconds=400; Minutes=6; Seconds=31; TotalDays=0.83786343634490734; TotalHours=20.108722472277776; TotalMilliseconds=72391400.900200009; TotalMinutes=1206.5233483366667;TotalSeconds=72391.4009002}
Year : 2012ตัวอย่างใช้ Select-Object cmdlet เพื่อรับคุณสมบัติทั้งหมดของวัตถุ DateTime ใช้ ConvertTo-Json cmdlet เพื่อแปลงออบเจ็กต์ DateTime เป็นสตริงที่จัดรูปแบบเป็นออบเจ็กต์ JSON และ cmdlet ConvertFrom-Json เพื่อแปลง สตริงที่จัดรูปแบบ JSON เป็นวัตถุ PSCustomObject
ตัวอย่างที่ 2: รับสตริง JSON จากบริการบนเว็บและแปลงเป็นออบเจ็กต์ PowerShell
คำสั่งนี้ใช้ Inrigger-WebRequest cmdlet เพื่อรับสตริง JSON จากบริการเว็บ จากนั้นใช้ ConvertFrom-Json cmdlet เพื่อแปลงเนื้อหา JSON เป็นอ็อบเจ็กต์ที่สามารถจัดการได้ พาวเวอร์เชลล์
# Ensures that Invoke-WebRequest uses TLS 1.2
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$j = Invoke-WebRequest 'https://api.github.com/repos/PowerShell/PowerShell/issues' | ConvertFrom-Jsonคุณยังสามารถใช้ Inrigger-RestMethod cmdlet ซึ่งจะแปลงเนื้อหา JSON เป็นออบเจ็กต์โดยอัตโนมัติ
ตัวอย่างที่ 3: แปลงสตริง JSON เป็นออบเจ็กต์ที่กำหนดเอง
ตัวอย่างนี้แสดงวิธีใช้ cmdlet ConvertFrom-Json เพื่อแปลงไฟล์ JSON เป็นออบเจ็กต์แบบกำหนดเองของ PowerShell
Get-Content -Raw JsonFile.JSON | ConvertFrom-Jsonคำสั่งใช้ Get-Content cmdlet เพื่อรับสตริงในไฟล์ JSON พารามิเตอร์ Raw ส่งคืนไฟล์ทั้งหมดเป็นออบเจ็กต์ JSON เดียว จากนั้นจะใช้ตัวดำเนินการไปป์ไลน์เพื่อส่งสตริงที่คั่นไปยัง cmdlet ConvertFrom-Json ซึ่งจะแปลงเป็นออบเจ็กต์แบบกำหนดเอง
ตัวอย่างที่ 4: แปลงสตริง JSON เป็นตารางแฮช
คำสั่งนี้แสดงตัวอย่างที่สวิตช์ -AsHashtable สามารถเอาชนะข้อจำกัดของคำสั่งได้
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtableสตริง JSON มีคู่ค่าคีย์ 2 คู่ซึ่งมีคีย์ที่แตกต่างกันเพียงตัวพิมพ์เล็กเท่านั้น หากไม่มีสวิตช์ คำสั่งจะเกิดข้อผิดพลาด
ตัวอย่างที่ 5: ไปกลับอาร์เรย์องค์ประกอบเดี่ยว
คำสั่งนี้แสดงตัวอย่างที่ใช้สวิตช์ -NoEnumerate เพื่อปัดเศษอาร์เรย์ JSON องค์ประกอบเดียว
Write-Output "With -NoEnumerate: $('[1]' | ConvertFrom-Json -NoEnumerate | ConvertTo-Json -Compress)"
Write-Output "Without -NoEnumerate: $('[1]' | ConvertFrom-Json | ConvertTo-Json -Compress)"
With -NoEnumerate: [1]
Without -NoEnumerate: 1สตริง JSON มีอาร์เรย์ที่มีองค์ประกอบเดียว หากไม่มีสวิตช์ การแปลง JSON เป็น PSObject แล้วแปลงกลับด้วยคำสั่ง ConvertTo-Json จะให้ผลลัพธ์เป็นจำนวนเต็มเพียงตัวเดียว
พารามิเตอร์
-AsHashtable
แปลง JSON ให้เป็นวัตถุตารางแฮช สวิตช์นี้ถูกนำมาใช้ใน PowerShell 6.0 ตั้งแต่ PowerShell 7.3 เป็นต้นไป ออบเจ็กต์จะเป็น OrderedHashtable และรักษาการเรียงลำดับของคีย์จาก JSON ในเวอร์ชันก่อนหน้านี้ ออบเจ็กต์จะเป็น Hashtable
มีหลายสถานการณ์ที่สามารถเอาชนะข้อจำกัดบางประการของ ConvertFrom-Json cmdlet
- หากไม่มีสวิตช์นี้ เมื่อคีย์ตั้งแต่สองคีย์ขึ้นไปในออบเจ็กต์ JSON เหมือนกันโดยไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ คีย์เหล่านั้นจะถือว่าเป็นคีย์ที่เหมือนกัน ในกรณีนั้น เฉพาะคีย์สุดท้ายของคีย์ที่เหมือนกันโดยไม่คำนึงถึงขนาดตัวพิมพ์เท่านั้นที่จะรวมอยู่ในออบเจ็กต์ที่แปลงแล้ว
- หากไม่มีสวิตช์นี้ cmdlet จะแสดงข้อผิดพลาดเมื่อใดก็ตามที่ JSON มีคีย์ที่เป็นสตริงว่าง PSCustomObject ไม่สามารถมีชื่อคุณสมบัติที่เป็นสตริงว่างได้ ตัวอย่างเช่น สิ่งนี้สามารถเกิดขึ้นได้ในไฟล์
project.lock.json - ตารางแฮชสามารถประมวลผลได้เร็วขึ้นสำหรับโครงสร้างข้อมูลบางอย่าง
- พิมพ์ :
SwitchParameter
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
False
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Depth
รับหรือตั้งค่าความลึกสูงสุดที่อินพุต JSON ได้รับอนุญาต ค่าเริ่มต้นคือ 1024
พารามิเตอร์นี้ถูกนำมาใช้ใน PowerShell 6.2
- พิมพ์ :
Int32
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-InputObject
ระบุสตริง JSON ที่จะแปลงเป็นอ็อบเจ็กต์ JSON ป้อนตัวแปรที่มีสตริง หรือพิมพ์คำสั่งหรือนิพจน์ที่ได้รับสตริง คุณยังสามารถไปป์สตริงเพื่อ ConvertFrom-Json
จำเป็นต้องมีพารามิเตอร์ InputObject แต่ค่าของพารามิเตอร์อาจเป็นสตริงว่างได้ เมื่อวัตถุอินพุตเป็นสตริงว่าง ConvertFrom-Json จะไม่สร้างเอาต์พุตใดๆ ค่า InputObject ไม่สามารถเป็น $null
- พิมพ์ :
String
- ตำแหน่ง:
0
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
True
- ยอมรับอักขระตัวแทน:
False
-NoEnumerate
ระบุว่าไม่ได้ระบุเอาต์พุต
การตั้งค่าพารามิเตอร์นี้ทำให้อาร์เรย์ถูกส่งเป็นวัตถุเดียวแทนที่จะส่งทุกองค์ประกอบแยกกัน สิ่งนี้รับประกันว่า JSON สามารถไปกลับได้ผ่าน ConvertTo-Json
- พิมพ์ :
SwitchParameter
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
False
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
อินพุต
สตริง
คุณสามารถไพพ์สตริง JSON ไปที่ ConvertFrom-Json
เอาท์พุต
PSCustomObject
สั่งแฮชได้
หมายเหตุ
cmdlet นี้ใช้งานโดยใช้ Newtonsoft Json.NET
เริ่มต้นใน PowerShell 6 ConvertTo-Json พยายามแปลงสตริงที่จัดรูปแบบเป็นการประทับเวลาเป็นค่า DateTime ค่าที่แปลงแล้วคืออินสแตนซ์ [datetime] ที่มีคุณสมบัติ Kind ที่กำหนดดังนี้:
ไม่ระบุหากไม่มีข้อมูลโซนเวลาในสตริงอินพุตUtcหากข้อมูลโซนเวลาเป็นZต่อท้ายท้องถิ่นหากระบุข้อมูลโซนเวลาเป็น ออฟเซ็ต UTC ต่อท้าย เช่น+02:00ออฟเซ็ตจะถูกแปลงเป็นโซนเวลาที่กำหนดค่าไว้ของผู้โทรอย่างเหมาะสม การจัดรูปแบบเอาต์พุตเริ่มต้นไม่ได้ระบุการชดเชยเขตเวลาดั้งเดิม
ประเภท PSObject จะรักษาลำดับของคุณสมบัติตามที่แสดงในสตริง JSON เริ่มต้นด้วย PowerShell 7.3 พารามิเตอร์ AsHashtable จะสร้าง OrderedHashtable คู่คีย์-ค่าจะถูกเพิ่มตามลำดับที่แสดงในสตริง JSON OrderedHashtable จะรักษาลำดับนั้นไว้