ConvertFrom-Json

JSON biçimli bir dizeyi özel bir nesneye veya karma tabloya dönüştürür.

Syntax

Default (Varsayılan)

ConvertFrom-Json
    [-InputObject] <String>
    [-AsHashtable]
    [-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

PowerShell 6'dan başlayarak, cmdlet açıklamaları olan JSON'ı destekler. JSON açıklamaları iki eğik çizgi (//) karakteriyle başlar. JSON açıklamaları, cmdlet'i tarafından nesne çıkışında yakalanmaz. PowerShell 6'nın öncesinde ConvertFrom-Json bir JSON açıklamasıyla karşılaştığında hata döndürecekti.

Ö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    : 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, 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 anahtar PowerShell 6.0'da kullanıma sunulmuştur. PowerShell 7.3'ten başlayarak nesne bir OrderedHashtable ve JSON'dan anahtarların sırasını korur. Önceki sürümlerde nesnesi bir Hashtable.

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 harfe duyarsız olarak aynı olduğunda, bunlar aynı anahtarlar 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.

Parametre özellikleri

Tür:SwitchParameter
Default value:False
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer: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.

Parametre özellikleri

Tür:Int32
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer: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 ConvertFrom-Json'e 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 $null.

Parametre özellikleri

Tür:String
Default value:None
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:0
Zorunlu:True
İşlem hattından gelen değer:True
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer: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-Jsonaracılığıyla yuvarlanabilmesini garanti eder.

Parametre özellikleri

Tür:SwitchParameter
Default value:False
Joker karakterleri destekler:False
DontShow:False

Parametre kümeleri

(All)
Position:Named
Zorunlu:False
İşlem hattından gelen değer:False
Özellik adına göre işlem hattından gelen değer:False
Kalan bağımsız değişkenlerden elde edilen değer:False

CommonParameters

Bu cmdlet yaygın parametreleri destekler: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction ve -WarningVariable. Daha fazla bilgi için bkz. about_CommonParameters.

Girişler

String

JSON dizesini ConvertFrom-Jsoniçin kanal oluşturabilirsiniz.

Çıkışlar

PSCustomObject

OrderedHashtable

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. Dönüştürülen değer, [datetime] özelliği aşağıdaki gibi ayarlanmış bir Kind örneğidir:

  • giriş dizesinde saat dilimi bilgisi yoksa Unspecified.
  • Utc, saat dilimi bilgileri sondaki bir Zise.
  • Local, saat dilimi bilgileri gibi bir UTC +02:00 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.

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.