Bagikan melalui


ConvertFrom-Json

Mengonversi string berformat JSON menjadi objek kustom atau tabel hash.

Sintaks

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

Deskripsi

Cmdlet ConvertFrom-Json mengonversi string berformat JavaScript Object Notation (JSON) menjadi PSObject kustom atau objek Hashtable 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 PSObject dan jenis Hashtable. 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 cmdlet ConvertTo-Json.

Cmdlet ini diperkenalkan di PowerShell 3.0.

Nota

Di Windows PowerShell 5.1, ConvertFrom-Json mengembalikan kesalahan saat mengalami komentar JSON. Di PowerShell 6 dan yang lebih tinggi, cmdlet mendukung JSON dengan komentar. Komentar JSON tidak ditangkap dalam keluaran objek oleh cmdlet. Untuk informasi selengkapnya, lihat bagian komentar JSON dari artikel about_Comments .

Contoh

Contoh 1: Mengonversi objek DateTime ke objek JSON

Perintah ini menggunakan cmdlet ConvertTo-Json dan ConvertFrom-Json untuk mengonversi objek DateTime dari cmdlet Get-Date ke objek JSON lalu ke PSCustomObject.

Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json

DisplayHint : 2
DateTime    : Monday, January 29, 2024 3:10:26 PM
Date        : 1/29/2024 12:00:00 AM
Day         : 29
DayOfWeek   : 1
DayOfYear   : 29
Hour        : 15
Kind        : 2
Millisecond : 931
Microsecond : 47
Nanosecond  : 600
Minute      : 10
Month       : 1
Second      : 26
Ticks       : 638421378269310476
TimeOfDay   : @{Ticks=546269310476; Days=0; Hours=15; Milliseconds=931; Microseconds=47;
              Nanoseconds=600; Minutes=10; Seconds=26; TotalDays=0.632256146384259;
              TotalHours=15.1741475132222; TotalMilliseconds=54626931.0476;
              TotalMicroseconds=54626931047.6; TotalNanoseconds=54626931047600;
              TotalMinutes=910.448850793333; TotalSeconds=54626.9310476}
Year        : 2024

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

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

Perintah ini menggunakan cmdlet Invoke-WebRequest untuk mendapatkan string JSON dari layanan web dan kemudian menggunakan cmdlet ConvertFrom-Json 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 cmdlet Invoke-RestMethod, yang secara otomatis mengonversi konten JSON menjadi objek.

Contoh 3: Mengonversi string JSON menjadi objek kustom

Contoh ini menunjukkan cara menggunakan cmdlet ConvertFrom-Json 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 cmdlet ConvertFrom-Json, yang mengonversinya menjadi objek kustom.

Contoh 4: Mengonversi string JSON ke tabel hash

Perintah ini memperlihatkan contoh di mana sakelar -AsHashtable 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 menghasilkan kesalahan.

Contoh 5: Perjalanan bolak-balik array elemen tunggal

Perintah ini menunjukkan contoh di mana sakelar -NoEnumerate digunakan untuk mengirim dan menerima kembali array JSON dengan satu elemen.

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 ke PSObject lalu mengonversinya kembali dengan perintah ConvertTo-Json menghasilkan satu bilangan bulat.

Parameter

-AsHashtable

Mengonversi JSON menjadi objek tabel hash. Sakelar ini diperkenalkan dalam PowerShell 6.0. Dimulai dengan PowerShell 7.3, objek adalah OrderedHashtable dan mempertahankan pengurutan kunci dari JSON. Dalam versi sebelumnya, objek adalah Hashtable.

Ada beberapa skenario di mana ia dapat mengatasi beberapa batasan cmdlet ConvertFrom-Json.

  • Tanpa sakelar ini, ketika dua atau lebih kunci dalam objek JSON identik tanpa memperhatikan huruf besar/kecil, mereka diperlakukan sebagai kunci yang sama. Dalam kasus ini, hanya kunci terakhir yang identik tanpa memperhatikan huruf besar/kecil yang disertakan dalam objek yang dikonversi.
  • Tanpa sakelar ini, cmdlet melemparkan 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 file project.lock.json.
  • Tabel hash dapat diproses lebih cepat untuk struktur data tertentu.
Jenis:SwitchParameter
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-DateKind

Menentukan metode yang digunakan saat mengurai nilai waktu tanggal dalam string JSON. Nilai yang dapat diterima untuk parameter ini adalah:

  • Default
  • Local
  • Utc
  • Offset
  • String

Untuk informasi tentang bagaimana nilai-nilai ini memengaruhi konversi, lihat detail di NOTES.

Parameter ini diperkenalkan di PowerShell 7.5.

Jenis:Microsoft.PowerShell.Commands.JsonDateKind
Nilai yang diterima:Default, Local, Utc, Offset, String
Position:Named
Nilai default:Default
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

-Depth

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

Parameter ini diperkenalkan di PowerShell 6.2.

Jenis:Int32
Position:Named
Nilai default:None
Diperlukan:False
Terima input alur:False
Terima karakter wildcard: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 dapat $null.

Jenis:String
Position:0
Nilai default:None
Diperlukan:True
Terima input alur:True
Terima karakter wildcard: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 JSON dapat diproses bolak-balik melalui ConvertTo-Json.

Jenis:SwitchParameter
Position:Named
Nilai default:False
Diperlukan:False
Terima input alur:False
Terima karakter wildcard:False

Input

String

Anda dapat menyalurkan string JSON ke ConvertFrom-Json.

Output

PSCustomObject

OrderedHashtable

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.

PowerShell 7.5 menambahkan parameter DateKind, yang memungkinkan Anda mengontrol bagaimana string tanda waktu dikonversi. Parameter menerima nilai berikut:

  • Default - Mengonversi tanda waktu ke instans [datetime] sesuai dengan aturan berikut:
    • Jika tidak ada informasi zona waktu dalam string input, Json.NET serializer mengonversi nilai sebagai nilai waktu yang tidak ditentukan.
    • Jika informasi zona waktu adalah Zberikutnya, serializer Json.NET mengonversi tanda waktu menjadi nilai UTC.
    • Jika tanda waktu menyertakan offset UTC seperti +02:00, offset dikonversi ke zona waktu yang dikonfigurasi pemanggil. Pemformatan output default tidak menunjukkan offset zona waktu asli.
  • Local - Mengonversi tanda waktu ke instans [datetime] dalam waktu lokal . Jika tanda waktu menyertakan offset UTC, offset dikonversi ke zona waktu yang dikonfigurasi pemanggil. Pemformatan output default tidak menunjukkan offset zona waktu asli.
  • Utc - Mengonversi nilai menjadi instans [datetime] dalam waktu UTC.
  • Offset - Mengonversi tanda waktu menjadi instans [DateTimeOffset] dengan offset zona waktu dari string asli yang dipertahankan dalam instans tersebut. Jika string mentah tidak berisi offset zona waktu, nilai DateTimeOffset akan ditentukan dalam zona waktu lokal.
  • String - Mempertahankan nilai instans [string]. Ini memastikan bahwa logika penguraian kustom apa pun dapat diterapkan ke nilai string mentah.

Jenis PSObject mempertahankan urutan properti seperti yang disajikan dalam string JSON. Dimulai dengan PowerShell 7.3, parameter AsHashtable membuat OrderedHashtable . Pasangan kunci-nilai ditambahkan dalam urutan yang disajikan dalam string JSON. OrderedHashtable mempertahankan urutan tersebut.