Aracılığıyla paylaş


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-Jsonbir 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ır project.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-Jsonde 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-Jsonyuvarlanabilmesini garanti eder.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Girişler

String

JSON dizesini öğesine ConvertFrom-Jsonyöneltebilirsiniz.

Çıkışlar

PSCustomObject

Hashtable

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]:

  • Unspecifiedgiriş dizesinde saat dilimi bilgisi yoksa.
  • Utc, saat dilimi bilgileri sondaki Zbir ise.
  • Local, saat dilimi bilgileri gibi +02:00sondaki 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.