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]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
Cmdlet, ConvertFrom-Json
JavaScript Nesne Gösterimi (JSON) biçimli bir dizeyi, JSON dizesindeki her alan için bir özelliği olan özel bir 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 cmdlet'ini ConvertTo-Json
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 (//
) karakterle başlar. JSON açıklamaları, cmdlet'i tarafından nesne çıkışında yakalanmaz. PowerShell 6'nın öncesinde bir ConvertFrom-Json
JSON açıklamasıyla karşılaştığında hata döndürür.
Ö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: 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 -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ı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 -AsHashtable
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 anahtarın kullanıldığı bir örneği -NoEnumerate
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 komutuyla ConvertTo-Json
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'dır ve JSON'dan anahtarların sırasını korur. Önceki sürümlerde nesne bir Hashtable'dır.
Cmdlet'in bazı sınırlamalarını aşabileceği çeşitli senaryolar ConvertFrom-Json
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 dosyalarda
project.lock.json
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 |
-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 öğesine de yöneltebilirsiniz ConvertFrom-Json
.
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
.
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 aracılığıyla ConvertTo-Json
yuvarlanabilmesini 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 adresine yöneltebilirsiniz ConvertFrom-Json
.
Çı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, özellik kümesi aşağıdaki gibi ayarlanmış bir [datetime]
Kind
örnektir:
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.
PSObject türü, JSON dizesinde gösterildiği gibi özelliklerin sırasını korur. PowerShell 7.3'le başlayarak AsHashtable parametresi bir OrderedHashtable oluşturur. Anahtar-değer çiftleri, JSON dizesinde sunulan sırayla eklenir. OrderedHashtable bu siparişi korur.
İlişkili Bağlantılar
PowerShell