Powershell 哈希表数组不能通过ConvertTo JSON转换为JSON

Powershell 哈希表数组不能通过ConvertTo JSON转换为JSON,powershell,Powershell,这件事已经做了一个小时了,还没弄清楚到底是怎么回事。下面的代码构建一个哈希表数组,将该数组与一组其他键值对一起添加到另一个哈希表中,然后将整个数组转换为JSON: $01_ch_channel_hist_id = @{"ColumnName"="01_ch_channel_hist_id";"ColumnType"="bigint"} $02_ch_channel_id = @{"ColumnName"="02_ch_channel_id";"ColumnType"="bigint"} $08_

这件事已经做了一个小时了,还没弄清楚到底是怎么回事。下面的代码构建一个哈希表数组,将该数组与一组其他键值对一起添加到另一个哈希表中,然后将整个数组转换为JSON:

$01_ch_channel_hist_id = @{"ColumnName"="01_ch_channel_hist_id";"ColumnType"="bigint"}
$02_ch_channel_id = @{"ColumnName"="02_ch_channel_id";"ColumnType"="bigint"}
$08_ch_load_id = @{"ColumnName"="08_ch_load_id";"ColumnType"="bigint"}
$columns = $01_ch_channel_hist_id,$02_ch_channel_id,$08_ch_load_id
$ChannelDimH = @{}
$ChannelDimH.Add("Columns",$columns)
$ChannelDimH.Add("TableName","CHANNEL_DIM_H")
$ChannelDimH.Add("UniqueColumn","channel_id")
$tables = @()
$tables += $ChannelDimH
$sqoopOracleTableAndColumnMetadata = @{}
$sqoopOracleTableAndColumnMetadata.Add("tables",$tables)

$sqoopOracleTableAndColumnMetadata | ConvertTo-Json
以下是输出:

{
    "tables":  [
                   {
                       "TableName":  "CHANNEL_DIM_H",
                       "UniqueColumn":  "channel_id",
                       "Columns":  "System.Collections.Hashtable System.Collections.Hashtable System.Collections.Hashtable"
                   }
               ]
}
请注意,“Columns”数组中的hastables返回为:

"System.Collections.Hashtable System.Collections.Hashtable System.Collections.Hashtable"

这些哈希表中的数据没有出现在我的JSON文档中。为什么不呢?

想出来了。调用ConvertToJSON需要一个深度指定

$01_ch_channel_hist_id = @{"ColumnName"="01_ch_channel_hist_id";"ColumnType"="bigint"}
$02_ch_channel_id = @{"ColumnName"="02_ch_channel_id";"ColumnType"="bigint"}
$08_ch_load_id = @{"ColumnName"="08_ch_load_id";"ColumnType"="bigint"}
$columns = $01_ch_channel_hist_id,$02_ch_channel_id,$08_ch_load_id
$ChannelDimH = @{}
$ChannelDimH.Add("Columns",$columns)
$ChannelDimH.Add("TableName","CHANNEL_DIM_H")
$ChannelDimH.Add("UniqueColumn","channel_id")
$tables = @()
$tables += $ChannelDimH
$sqoopOracleTableAndColumnMetadata = @{"tables"=$tables}
#$sqoopOracleTableAndColumnMetadata.Add("tables",$tables)

$sqoopOracleTableAndColumnMetadata | ConvertTo-Json -Depth 4

啊,我已经弄明白了。这是ConvertTo Json的深度参数。$sqoopOracleTableAndColumnMetadata | ConvertTo Json-Depth 10Glad听你说明白了,我正要建议使用
Depth
参数,因为几个月前我遇到了同样的问题。您应该将您的发现作为答案发布,并将其标记为其他任何查看问题以寻求解决方案的人的答案。:)