2016-04-10 21 views
0

ConvertTo-Jsonと表示する前にオブジェクトにデータをパックしようとしています。 $output$dataを割り当てる方法はあり予期しない配列から文字列への変換

  { "sub": { "sub-sub": [ "a", "b", "c" ] }} 
{ "root": { "sub": { "sub-sub": "a b c" } }} 

:(わかりやすくするために手でフォーマットされた)

$array = @("a","b","c") 
$data = @{"sub" = @{"sub-sub" = $array}} 
$output = @{"root" = $data} 
ConvertTo-Json -InputObject $data 
ConvertTo-Json -InputObject $output 

出力を:以下のテストケースは、私がデータを扱うとどのような問題が発生しています完璧にする方法を示しこの奇妙な暗黙のキャスティングなしで?コメント欄で述べたように

+2

'をConvertTo-JSON -InputObject $出力-depth 3' –

+0

ありがとうございました! ...深さ1は "サブサブ" のSystem.Collections.Hashtableを与えますが、深さ2ではObject [] の代わりに["a"、 "b"、 "c"]の "abc"私はこれが非常に論理的ではないと思う。 –

+1

'Depth'は単にPowerShellが値を"解読 "するネストされたレベルの数です。それ以外の場合は、デフォルトでオブジェクト文字列表現になります。これは、正確には –

答えて

5

は、ConvertTo-Jsonは、それが文字列にその深さを超えて発見どのオブジェクトに変換することによって最大ネスティングレベルを超えオブジェクト構造、又はを、平らしようとします。

デフォルトの深さは2ですが、あなたはそれがDepthパラメータで深く行く必要があることを指定することができます。

PS C:\> @{[email protected]{[email protected]{[email protected]("level3-1","level3-2")}}}|ConvertTo-Json 
{ 
    "root": { 
     "level1": { 
      "level2": "level3-1 level3-2" 
     } 
    } 
} 
PS C:\> @{[email protected]{[email protected]{[email protected]("level3-1","level3-2")}}}|ConvertTo-Json -Depth 3 
{ 
    "root": { 
     "level1": { 
      "level2": [ 
       "level3-1", 
       "level3-2" 
      ] 
     } 
    } 
} 
関連する問題