2016-04-06 20 views
0

ファイルからJSONを読み込み、2つのプロパティを連結して作成した文字列に変換します。問題は、それが配列の完全に異なるアイテムとしてのId値とVersion値を含む配列を作成して終わるということですオブジェクト配列をPowerShellの文字列配列に変換する

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

Write-Output $packageCache 

は、これまでのところ、私はこれを持っています。

それはこのように見て終わる:私は間違って持っている

key1 
key2 
value1 
value2 

何?

更新: JSONは次のようになります。

key1-value1 
key2-value2 

掲載されたコードがあるすべてです:

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

期待される結果がこれです。はい、スクリプトの一部です。

+0

サンプルJSONを開始すると、問題が再現できるようになります。 – Matt

+1

コードがどのように表示されるのかわかりません。エラーが発生するのはエラーのみです有効なJSONなどではない)または '-'を含む文字列、または出力の最後に少なくとも' -'行を含んでいます。私はあなたがシェルで作業していて、同じ順序で行を実行しなかったか、またはその行を実行しなかったか、スクリプト内にあり、ある行が別のスコープ内の関数にあると推測する必要があります。それとも...? – TessellatingHeckler

+0

また、 '.Keys'と' .Values'(末尾に 's'をつけて)が必要ですが、これは以前の混乱を変えません。 – TessellatingHeckler

答えて

1

それはちょうどに変更し、あなたをめちゃくちゃにされ、最終的なパイプバインドです:ちなみに、私はちょうど"で全体を包む、+兆しが必要ではないことも指摘します

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

上記のように。

+1

私は文字通り自分の答えをタイプアップしていました。私はConvertFrom-JsonがSystem.Object []を返すことに気付きませんでした。つまり、私は1つのObject []に対して繰り返し処理を続けました。 1行のバリエーションは、最初の部分を**(**と**)**で囲むだけです。いいキャッチ! – kettch

+0

1行バージョンの良い点は、代わりにそれを投稿しているはずです:) – CodedBeard

0

CodedBeardは、私がここで間違ってトラックに完全だった

をそれに私を打つ、しかし...。どうやらConvertFrom-JsonはObject []を返します。だから、私は単品を繰り返していて、どこにもいない。

返された配列を展開すると、すべてが機能し始めます。

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

)コマンドの最初の部分の周りに