2016-04-06 18 views
0

dizgisi dizisine dönüştürme Dosyadan JSON okumak ve iki özelliğin birleşiminden oluşan bir dizi dizeye dönüştürmek istiyorum.Nesne dizisini PowerShell

Şimdiye kadar bu var:

$packageCache = Get-Content $pathtojsonfile | ConvertFrom-Json | %{$($_.Key) + "-" + $($_.Value)} 

Write-Output $packageCache 

sorun dizide bambaşka öğeleri olarak Kimliği değerleri ve Sürüm değerlerini içeren bir dizi oluşturarak biter olmasıdır.

key1 
key2 
value1 
value2 

yanlış neyin var:

Böyle bakıyor biter?

Güncelleme: JSON şuna benzer:

key1-value1 
key2-value2 

yayınlandığı şekilde kod var hepsi bu:

[{ "Key":"key1", "Value":"value1"},{"Key":"key2", "Value":"value2"}] 

beklenen sonuç şudur. Evet, bir senaryonun parçası.

+0

Yani bize bir örnek JSON başlayabilmemiz için bu sorunu bile açıklayamıyoruz – Matt

+1

Bu sizin kodunuzun nasıl olduğunu göremiyorum, bana mantıklı olan tek çıktı hataları olur (dosya yok Var değil, geçerli bir JSON, vb.) veya çıktıların sonunda '-' veya en azından' -' satırlarını içeren dizeler. Kabukta çalıştığınızı ve satırları aynı sırayla çalıştırdığınızı veya bu satırları çalıştırmadığınızı veya bir komut dosyasında olduğunuzu ve bir satırın başka bir kapsamdaki bir işlevde olduğunu tahmin etmem gerekiyor. ya da böyle bir şey...? – TessellatingHeckler

+0

Ayrıca muhtemelen .Keys ve '.Values'leri (sonunda 's' ile) istersiniz, ama bu benim önceki karışıklığımı değiştirmez. – TessellatingHeckler

cevap

1

Seni berbat ediyor nihai boru bağlamak, sadece onu değiştirecek: Ben de + işaretler gerekli olmadığını işaret edeceğiz, arada

$json = Get-Content $pathtojsonfile | ConvertFrom-Json 
$packageCache = $json |% {"$($_.Key)-$($_.Value)"} 
$packageCache 
key1-value1 
key2-value2 

, sadece " içinde her şey sarmak Yukarıda gösterildiği gibi.

+1

Gerçekten sizin kendi yanıtınızı yazarken ben de sizinki gibi yazdım. ConvertFrom-Json'un bir System.Object [] döndürdüğünü bilmiyordum. Bu, tek bir nesne üzerinde yinelemeyi sürdürdüğüm anlamına gelir []. Bir satır varyasyonu sadece ilk kısmı ** (** ve **) ** ile çevreler. İyi yakalama! – kettch

+0

1 satır sürümünde iyi bir nokta, bunun yerine yazmış olmalıydı :) – CodedBeard

0
CodedBeard beni alt

, ama ...

Burada yanlış yolda tamamen idi. Görünüşe göre ConvertFrom-Json bir Object []. Yani, sadece tek bir öğe üzerinde yineliyordum ve hiçbir yere gitmiyordum.

Döndürülmüş diziyi kaldırırsam, her şey çalışmaya başlar.

($packageCache = Get-Content $pathtojsonfile | ConvertFrom-Json) | %{$($_.Key) + "-" + $($_.Value)} 

Not ( ve ) komutunun ilk kısmı etrafında.

İlgili konular