ConvertFrom-Json

Mengonversi string berformat JSON menjadi objek kustom atau tabel hash.

Sintaks

ConvertFrom-Json
                [-InputObject] <String>
                [-AsHashtable]
                [-Depth <Int32>]
                [-NoEnumerate]
                [<CommonParameters>]

Deskripsi

ConvertFrom-Json Cmdlet mengonversi string berformat JavaScript Object Notation (JSON) menjadi objek PSObject atau Hashtable kustom yang memiliki properti untuk setiap bidang dalam string JSON. JSON umumnya digunakan oleh situs web untuk memberikan representasi tekstual objek. Cmdlet menambahkan properti ke objek baru saat memproses setiap baris string JSON.

Standar JSON memungkinkan nama kunci duplikat, yang dilarang dalam jenis Hashtable akhir PSObject. Misalnya, jika string JSON berisi kunci duplikat, hanya kunci terakhir yang digunakan oleh cmdlet ini. Lihat contoh lain di bawah ini.

Untuk menghasilkan string JSON dari objek apa pun, gunakan ConvertTo-Json cmdlet .

Cmdlet ini diperkenalkan di PowerShell 3.0.

Catatan

Dimulai dengan PowerShell 6, cmdlet mendukung JSON dengan komentar. Komentar JSON dimulai dengan dua karakter garis miring// (). Komentar JSON tidak diambil dalam output objek oleh cmdlet . Sebelum PowerShell 6, ConvertFrom-Json akan mengembalikan kesalahan saat menemukan komentar JSON.

Contoh

Contoh 1: Mengonversi objek DateTime menjadi objek JSON

Perintah ini menggunakan ConvertTo-Json cmdlet dan ConvertFrom-Json untuk mengonversi objek DateTime dari Get-Date cmdlet ke objek JSON lalu ke 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

Contohnya menggunakan Select-Object cmdlet untuk mendapatkan semua properti objek DateTime . Ini menggunakan ConvertTo-Json cmdlet untuk mengonversi objek DateTime ke string yang diformat sebagai objek JSON dan ConvertFrom-Json cmdlet untuk mengonversi string berformat JSON menjadi objek PSCustomObject .

Contoh 2: Mendapatkan string JSON dari layanan web dan mengonversinya menjadi objek PowerShell

Perintah ini menggunakan Invoke-WebRequest cmdlet untuk mendapatkan string JSON dari layanan web dan kemudian menggunakan ConvertFrom-Json cmdlet untuk mengonversi konten JSON ke objek yang dapat dikelola di PowerShell.

# 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

Anda juga dapat menggunakan Invoke-RestMethod cmdlet , yang secara otomatis mengonversi konten JSON menjadi objek.

Contoh 3: Mengonversi string JSON menjadi objek kustom

Contoh ini memperlihatkan cara menggunakan ConvertFrom-Json cmdlet untuk mengonversi file JSON ke objek kustom PowerShell.

Get-Content -Raw JsonFile.JSON | ConvertFrom-Json

Perintah menggunakan cmdlet Get-Content untuk mendapatkan string dalam file JSON. Parameter Raw mengembalikan seluruh file sebagai objek JSON tunggal. Kemudian menggunakan operator alur untuk mengirim string yang dibatasi ke ConvertFrom-Json cmdlet, yang mengonversinya menjadi objek kustom.

Contoh 4: Mengonversi string JSON ke tabel hash

Perintah ini menunjukkan contoh di mana -AsHashtable sakelar dapat mengatasi batasan perintah.

'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable

String JSON berisi dua pasangan nilai kunci dengan kunci yang hanya berbeda dalam casing. Tanpa sakelar, perintah akan melemparkan kesalahan.

Contoh 5: Round-trip array elemen tunggal

Perintah ini menunjukkan contoh di mana -NoEnumerate sakelar digunakan untuk melakukan round-trip array JSON elemen tunggal.

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

String JSON berisi array dengan satu elemen. Tanpa sakelar, mengonversi JSON menjadi PSObject lalu mengonversinya kembali dengan ConvertTo-Json perintah menghasilkan satu bilangan bulat.

Parameter

-AsHashtable

Mengonversi JSON menjadi objek tabel hash. Sakelar ini diperkenalkan di PowerShell 6.0. Ada beberapa skenario di mana ia dapat mengatasi beberapa keterbatasan ConvertFrom-Json cmdlet.

  • Tanpa sakelar ini, ketika dua atau lebih kunci dalam objek JSON tidak sensitif huruf besar/kecil identik, kunci tersebut diperlakukan sebagai kunci yang identik. Dalam hal ini, hanya kunci identik terakhir yang tidak peka huruf besar/kecil yang disertakan dalam objek yang dikonversi.
  • Tanpa sakelar ini, cmdlet melempar kesalahan setiap kali JSON berisi kunci yang merupakan string kosong. PSCustomObject tidak dapat memiliki nama properti yang merupakan string kosong. Misalnya, ini dapat terjadi dalam project.lock.json file.
  • Tabel hash dapat diproses lebih cepat untuk struktur data tertentu.
Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-Depth

Mendapatkan atau mengatur kedalaman maksimum yang diizinkan untuk dimiliki input JSON. Defaultnya adalah 1024.

Parameter ini diperkenalkan di PowerShell 6.2.

Type:Int32
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Menentukan string JSON untuk dikonversi ke objek JSON. Masukkan variabel yang berisi string, atau ketik perintah atau ekspresi yang mendapatkan string. Anda juga dapat menyalurkan string ke ConvertFrom-Json.

Parameter InputObject diperlukan, tetapi nilainya bisa menjadi string kosong. Ketika objek input adalah string kosong, ConvertFrom-Json tidak menghasilkan output apa pun. Nilai InputObject tidak boleh $null.

Type:String
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

-NoEnumerate

Menentukan bahwa output tidak dijumlahkan.

Mengatur parameter ini menyebabkan array dikirim sebagai objek tunggal alih-alih mengirim setiap elemen secara terpisah. Ini menjamin bahwa JSON dapat disandingkan melalui ConvertTo-Json.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

Input

String

Anda dapat menyalurkan string JSON ke ConvertFrom-Json.

Output

PSCustomObject

Hashtable

Catatan

Cmdlet ini diimplementasikan menggunakan Newtonsoft Json.NET.

Dimulai di PowerShell 6, ConvertTo-Json mencoba mengonversi string yang diformat sebagai tanda waktu ke nilai DateTime . Nilai yang dikonversi adalah [datetime] instans dengan properti yang Kind ditetapkan sebagai berikut:

  • Unspecified, jika tidak ada informasi zona waktu dalam string input.
  • Utc, jika informasi zona waktu adalah trailing Z.
  • Local, jika informasi zona waktu diberikan sebagai offset UTC berikutnya seperti +02:00. Offset dikonversi dengan benar ke zona waktu yang dikonfigurasi pemanggil. Pemformatan output default tidak menunjukkan offset zona waktu asli.

Jenis PSObject mempertahankan urutan properti seperti yang disajikan dalam string JSON. Meskipun pasangan kunci-nilai ditambahkan ke Hashtable dalam urutan yang disajikan dalam string JSON, objek Hashtable tidak mempertahankan urutan tersebut.