ConvertFrom-Json
JSON biçimli bir dizeyi özel bir nesneye veya karma tabloya dönüştürür.
Sözdizimi
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-DateKind <JsonDateKind>]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
ConvertFrom-Json
cmdlet'i JavaScript Nesne Gösterimi (JSON) biçimli dizeyi, JSON dizesindeki her alan için bir özelliği olan özel PSObject veya Hashtable nesnesine dönüştürür.
JSON, web siteleri tarafından nesnelerin metinsel gösterimini sağlamak için yaygın olarak kullanılır. Cmdlet, JSON dizesinin her satırını işlerken özellikleri yeni nesneye ekler.
JSON standardı, PSObject ve Hashtable türlerinde yasaklanan yinelenen anahtar adlara izin verir. Örneğin, JSON dizesi yinelenen anahtarlar içeriyorsa, bu cmdlet tarafından yalnızca son anahtar kullanılır. Aşağıdaki diğer örneklere bakın.
Herhangi bir nesneden JSON dizesi oluşturmak için ConvertTo-Json
cmdlet'ini kullanın.
Bu cmdlet PowerShell 3.0'da kullanıma sunulmuştur.
Not
Windows PowerShell 5.1'de ConvertFrom-Json
bir JSON açıklamasıyla karşılaştığında bir hata döndürdü. PowerShell 6 ve üzeri sürümlerde cmdlet açıklamaları olan JSON'ı destekler. JSON yorumları, cmdlet tarafından nesnelerin çıktısında yer almaz. Daha fazla bilgi için about_Comments makalesinin JSON açıklamaları bölümüne bakın.
Örnekler
Örnek 1: DateTime nesnesini JSON nesnesine dönüştürme
Bu komut ConvertTo-Json
ve ConvertFrom-Json
cmdlet'lerini kullanarak cmdlet'inden Get-Date
nesnesini bir JSON nesnesine ve ardından PSCustomObjectdönüştürür.
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
Örnek, Select-Object
nesnesinin tüm özelliklerini almak için cmdlet'ini kullanır.
ConvertTo-Json
nesnesini JSON nesnesi olarak biçimlendirilmiş bir dizeye dönüştürmek için cmdlet'ini ve JSON biçimli dizeyi ConvertFrom-Json
nesnesine dönüştürmek için cmdlet'ini kullanır.
Örnek 2: Web hizmetinden JSON dizeleri alma ve bunları PowerShell nesnelerine dönüştürme
Bu komut, bir web hizmetinden JSON dizeleri almak için Invoke-WebRequest
cmdlet'ini kullanır ve ardından JSON içeriğini PowerShell'de yönetilebilen nesnelere dönüştürmek için ConvertFrom-Json
cmdlet'ini kullanır.
# 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
JSON içeriğini otomatik olarak nesnelere dönüştüren Invoke-RestMethod
cmdlet'ini de kullanabilirsiniz.
Örnek 3: JSON dizesini özel nesneye dönüştürme
Bu örnekte bir JSON dosyasını PowerShell özel nesnesine dönüştürmek için ConvertFrom-Json
cmdlet'inin nasıl kullanılacağı gösterilmektedir.
Get-Content -Raw JsonFile.json | ConvertFrom-Json
Komut, dizeleri bir JSON dosyasına almak için Get-Content cmdlet'ini kullanır.
Raw parametresi, dosyanın tamamını tek bir JSON nesnesi olarak döndürür. Ardından sınırlanmış dizeyi özel bir nesneye dönüştüren ConvertFrom-Json
cmdlet'ine göndermek için işlem hattı işlecini kullanır.
Örnek 4: JSON dizesini karma tabloya dönüştürme
Bu komut, -AsHashtable
anahtarının komut sınırlamalarını aşabileceği bir örnek gösterir.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
JSON dizesi, yalnızca büyük/küçük harf bakımından farklı anahtarlara sahip iki anahtar değer çifti içerir. Anahtar olmadan komut bir hata oluştururdu.
Örnek 5: Tek bir öğe dizisine gidiş dönüş
Bu komut, tek bir öğe JSON dizisine gidiş dönüş yapmak için -NoEnumerate
anahtarının kullanıldığı bir örneği gösterir.
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 dizesi tek bir öğeye sahip bir dizi içerir. Anahtar olmadan, JSON'un PSObject'e dönüştürülmesi ve ardından ConvertTo-Json
komutuyla geri dönüştürülmesi tek bir tamsayıya neden olur.
Parametreler
-AsHashtable
JSON'ı karma tablo nesnesine dönüştürür. Bu seçenek PowerShell 6.0'da tanıtılmıştır. PowerShell 7.3'ten başlayarak nesne bir OrderedHashtable ve JSON'dan anahtarların sırasını korur. Önceki sürümlerde nesne, bir Hashtable'dir.
ConvertFrom-Json
cmdlet'inin bazı sınırlamalarını aşabileceği çeşitli senaryolar vardır.
- Bu anahtar olmadan, bir JSON nesnesindeki iki veya daha fazla anahtar büyük küçük harf farkı gözetmeksizin aynı olduğunda, bu anahtarlar aynı olarak değerlendirilir. Bu durumda, dönüştürülen nesneye büyük/küçük harfe duyarsız olarak aynı anahtarların yalnızca sonuncusu eklenir.
- Bu anahtar olmadan, JSON boş dize olan bir anahtar içerdiğinde cmdlet bir hata oluşturur.
PSCustomObject boş dizeler olan özellik adlarına sahip olamaz. Örneğin, bu
project.lock.json
dosyalarda oluşabilir. - Karma tablolar belirli veri yapıları için daha hızlı işlenebilir.
Tür: | SwitchParameter |
Position: | Named |
Default value: | False |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-DateKind
JSON dizesindeki tarih saat değerlerini ayrıştırırken kullanılan yöntemi belirtir. Bu parametre için kabul edilebilir değerler şunlardır:
Default
Local
Utc
Offset
String
Bu değerlerin dönüştürmeyi nasıl etkilediği hakkında bilgi için NOTESiçindeki ayrıntılara bakın.
Bu parametre PowerShell 7.5'te kullanıma sunulmuştur.
Tür: | Microsoft.PowerShell.Commands.JsonDateKind |
Kabul edilen değerler: | Default, Local, Utc, Offset, String |
Position: | Named |
Default value: | Default |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-Depth
JSON girişinin izin verilen maksimum derinliğini alır veya ayarlar. Varsayılan değer 1024'dür.
Bu parametre PowerShell 6.2'de kullanıma sunulmuştur.
Tür: | Int32 |
Position: | Named |
Default value: | None |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
-InputObject
JSON nesnelerine dönüştürülecek JSON dizelerini belirtir. Dizeyi içeren bir değişken girin veya dizeyi alan bir komut veya ifade yazın. Ayrıca bir dizeyi ConvertFrom-Json
'e yönlendirebilirsiniz.
InputObject parametresi gereklidir, ancak değeri boş bir dize olabilir. Giriş nesnesi boş bir dize olduğunda, ConvertFrom-Json
herhangi bir çıkış oluşturmaz.
InputObject değeri $null
olamaz.
Tür: | String |
Position: | 0 |
Default value: | None |
Gerekli: | True |
İşlem hattı girişini kabul et: | True |
Joker karakterleri kabul et: | False |
-NoEnumerate
Çıkışın numaralandırılmamış olduğunu belirtir.
Bu parametrenin ayarlanması, dizilerin her öğeyi ayrı ayrı göndermek yerine tek bir nesne olarak gönderilmesine neden olur. Bu, JSON'un ConvertTo-Json
aracılığıyla kayıpsız bir şekilde aktarılabilmesini garanti eder.
Tür: | SwitchParameter |
Position: | Named |
Default value: | False |
Gerekli: | False |
İşlem hattı girişini kabul et: | False |
Joker karakterleri kabul et: | False |
Girişler
JSON dizesini ConvertFrom-Json
'a yönlendirebilirsiniz.
Çıkışlar
PSCustomObject
Notlar
Bu cmdlet, Newtonsoft Json.NETkullanılarak uygulanır.
PowerShell 6'da ConvertTo-Json
, zaman damgası olarak biçimlendirilmiş dizeleri DateTime değerlerine dönüştürmeyi dener.
PowerShell 7.5, zaman damgası dizesinin nasıl dönüştürüldüğünü denetlemenizi sağlayan DateKind parametresini ekledi. parametresi aşağıdaki değerleri kabul eder:
-
Default
- Zaman damgasını aşağıdaki kurallara göre[datetime]
örneğine dönüştürür:- Giriş dizesinde saat dilimi bilgisi yoksa, Json.NET seri hale getirici değeri belirtilmemiş bir saat değeri olarak dönüştürür.
- Saat dilimi bilgileri sondaki bir
Z
ise, Json.NET seri hale getirici zaman damgasını UTC değerine dönüştürür. - Zaman damgası
+02:00
gibi bir UTC uzaklığı içeriyorsa, uzaklık çağıranın yapılandırılan saat dilimine dönüştürülür. Varsayılan çıkış biçimlendirmesi özgün saat dilimi uzaklığını göstermez.
-
Local
- Zaman damgasını yerel[datetime]
zamanındaki bir örneğine dönüştürür. Zaman damgası bir UTC uzaklığı içeriyorsa, uzaklık çağıranın yapılandırılan saat dilimine dönüştürülür. Varsayılan çıkış biçimlendirmesi özgün saat dilimi uzaklığını göstermez. -
Utc
- UTC saatinde değeri[datetime]
bir örneğe dönüştürür. -
Offset
- Zaman damgasını, özgün dizenin saat dilimi farkı korunacak şekilde[DateTimeOffset]
örneğine dönüştürür. Ham dize bir saat dilimi uzaklığı içermiyorsa, DateTimeOffset değeri yerel saat diliminde belirtilir. -
String
-[string]
örneğinin değerini korur. Bu, herhangi bir özel ayrıştırma mantığının ham dize değerine uygulanabilmesini sağlar.
PSObject türü, JSON dizesinde gösterildiği gibi özelliklerin sırasını korur. PowerShell 7.3'te AsHashtable parametresi bir OrderedHashtableoluşturur. Anahtar-değer çiftleri, JSON dizesinde sunulan sırayla eklenir. OrderedHashtable bu siparişi korur.