2016-04-10 17 views
0

我試圖在用ConvertTo-Json顯示它們之前將數據打包到對象中。下面的測試案例表明完美我是如何處理的數據,什麼問題時:意外的數組到字符串轉換

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

輸出(手工格式化爲清楚起見):

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

有什麼辦法來分配$data$output沒有這種奇怪的隱式投射?

+2

'的ConvertTo JSON的-InputObject $輸出-depth 3' –

+0

謝謝! ...雖然-Depth 1爲「sub-sub」 提供了System.Collections.Hashtable,但-Depth 2給出了[「a」,「b」,「c」]而不是Object [] 的「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" 
      ] 
     } 
    } 
}