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

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 จะรักษาลำดับนั้นไว้

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