2016-04-10 33 views
0

Verilerimi ConvertTo-Json ile görüntülemeden önce nesneler halinde paketlemeye çalışıyorum. Aşağıdaki test durumu mükemmel gösterir Verilerin uğraşıyorum nasıl ve hangi sorun oluşur: (netlik için elle biçimlendirilmiş)Dizgi dönüştürme için beklenmeyen dizi

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

Çıktı:

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

$data $output atamak için herhangi bir yolu var mı Bu garip örtük döküm olmadan mı?

yorum belirtildiği gibi
+2

'ConvertTo-Json -InputObject $ çıkışı -Derinlik 3 ' –

+0

teşekkür ederiz! ... her ne kadar -Depth 1, "alt-sub" için System.Collections.Hashtable verir ancak -Depth 2, Object [] yerine ["a", "b", "c"] için "abc" verir ve Bence bu çok mantıksız –

+1

'Depth' basitçe PowerShell'in bir değerin" çözüleceği "yuvalanmış düzeylerin sayısıdır. Aksi takdirde, –

cevap

5

, ConvertTo-Json bir dizeye o derinlikte ötesine bulduğu herşeyi nesne dönüştürerek maksimum yuvalanma seviyenin üzerinde nesne yapısını veya derinliği, düzleştirmek çalışacaktır.

varsayılan derinlik 2, ancak bunun Depth parametreyle derine gerektiğini belirtebilirsiniz:

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" 
      ] 
     } 
    } 
}