ConvertFrom-Json
JSON biçimli bir dizeyi özel bir nesneye veya karma tabloya dönüştürür.
Syntax
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
cmdlet'i ConvertFrom-Json
, JavaScript Nesne Gösterimi (JSON) biçimli bir dizeyi JSON dizesindeki her alan için bir özelliği olan özel bir PSCustomObject 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. JSON standardı , PSCustomObject ile yasaklanan kullanımı yasaklamaz. Ö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 cmdlet'ini ConvertTo-Json
kullanın.
Bu cmdlet PowerShell 3.0'da kullanıma sunulmuştur.
Not
PowerShell 6'dan başlayarak, bu cmdlet açıklamalarla JSON'ı destekler. Kabul edilen açıklamalar iki eğik çizgiyle (//
) başlatılır. Açıklama verilerde temsil edilmeyecektir ve veriler bozulmadan veya PowerShell 5.1'de olduğu gibi bir hata oluşturmadan dosyaya yazılabilir.
Örnekler
Örnek 1: DateTime nesnesini JSON nesnesine dönüştürme
Bu komut, ve ConvertFrom-Json
cmdlet'lerini kullanarak ConvertTo-Json
bir DateTime nesnesini cmdlet'inden Get-Date
JSON nesnesine ve ardından PSCustomObject nesnesine dönüştürür.
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
Örnek, DateTime nesnesinin Select-Object
tüm özelliklerini almak için cmdlet'ini kullanır. DateTime nesnesini JSON nesnesi olarak biçimlendirilmiş bir dizeye dönüştürmek için cmdlet'ini ConvertFrom-Json
ve JSON biçimli dizeyi PSCustomObject nesnesine dönüştürmek için cmdlet'ini kullanırConvertTo-Json
.
Örnek 2: Bir web hizmetinden JSON dizeleri alma ve bunları PowerShell nesnelerine dönüştürme
Bu komut, bir web hizmetinden Invoke-WebRequest
JSON dizelerini almak için cmdlet'ini ConvertFrom-Json
kullanır ve ardından JSON içeriğini PowerShell'de yönetilebilen nesnelere dönüştürmek için 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 cmdlet'ini de kullanabilirsiniz Invoke-RestMethod
.
Ö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 cmdlet'in nasıl kullanılacağı ConvertFrom-Json
gösterilmektedir.
Get-Content JsonFile.JSON | ConvertFrom-Json
komut, dizeleri bir JSON dosyasında almak için Get-Content cmdlet'ini kullanır. Ardından, sınırlandırılmış dizeyi cmdlet'ine göndermek için ConvertFrom-Json
işlem hattı işlecini kullanır ve bu da bunu özel bir nesneye dönüştürür.
Örnek 4: JSON dizesini karma tabloya dönüştürme
Bu komut, anahtarın komutun -AsHashtable
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 -NoEnumerate
gidiş dönüş yapmak için anahtarı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 öğeli bir dizi içerir. Anahtar olmadan, JSON'un PSObject'e dönüştürülmesi ve komutuyla ConvertTo-Json
geri dönüştürülmesi tek bir tamsayıyla sonuçılır.
Parametreler
-AsHashtable
JSON'yi karma tablo nesnesine dönüştürür. Bu anahtar PowerShell 6.0'da kullanıma sunulmuştur. Cmdlet'in bazı sınırlamalarını aşabileceği çeşitli senaryolar ConvertFrom-Json
vardır.
- JSON yalnızca büyük/küçük harf bakımından farklı anahtarlara sahip bir liste içeriyorsa. Anahtar olmadan, bu anahtarlar aynı anahtarlar olarak görülür ve bu nedenle yalnızca sonuncusu kullanılır.
- JSON boş bir dize olan bir anahtar içeriyorsa. anahtar olmadan cmdlet bir hata oluşturur çünkü a
PSCustomObject
buna izin vermez, ancak karma tablo bunu yapar. Bunun olabileceği örnek bir kullanım örneği dosyalardırproject.lock.json
. - Karma tablolar belirli veri yapıları için daha hızlı işlenebilir.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Depth
JSON girişinin sahip olabileceği maksimum derinliği alır veya ayarlar. Varsayılan olarak 1024'dür.
Bu parametre PowerShell 6.2'de kullanıma sunulmuştur.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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. Bir dizeyi öğesine ConvertFrom-Json
de yöneltebilirsiniz.
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 olamaz$null
.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoEnumerate
Çıkışın numaralandırılmadığını belirtir.
Bu parametrenin ayarlanması, dizilerin her öğeyi ayrı ayrı göndermek yerine tek bir nesne olarak gönderilmesine neden olur. Bu, JSON'un aracılığıyla ConvertTo-Json
yuvarlanabilmesini garanti eder.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Girişler
JSON dizesini öğesine ConvertFrom-Json
yöneltebilirsiniz.
Çıkışlar
PSCustomObject
Notlar
Bu cmdlet , Newtonsoft Json.NET kullanılarak uygulanır.
PowerShell 6'da başlayarak, ConvertTo-Json
zaman damgası olarak biçimlendirilmiş dizeleri DateTime değerlerine dönüştürmeye çalışır. Dönüştürülen değer, aşağıdaki gibi ayarlanmış bir Kind
özellik içeren bir örnektir[datetime]
:
Unspecified
giriş dizesinde saat dilimi bilgisi yoksa.Utc
, saat dilimi bilgileri sondakiZ
bir ise.Local
, saat dilimi bilgileri gibi+02:00
sondaki utc uzaklığı olarak verilmişse. Uzaklık, çağıranın yapılandırılan saat dilimine düzgün bir şekilde dönüştürülür. Varsayılan çıkış biçimlendirmesi özgün saat dilimi uzaklığını göstermez.