将数组添加为HashTable值

时间:2017-03-13 20:07:03

标签: json powershell

我正在编写一个PowerShell脚本,它将JSON传递给C#模块。

以下是JSON:

{
"Header":  {
               "Message":  {
                               "EDept":  [
                                              "Computers",
                                              "Electronics", 
                                              "Electricals"
                                          ],
                               "EId":  "001",
                               "Emp":  "All"
                           },
               "AnotherArray":  [
                                    "E1",
                                    "E2",
                                    "E3"
                                ],
               "ID":  "JOPP"
           }
}

我基本上有两个阵列/列表:" EDept" &安培; " AnotherArray&#34 ;. AnotherArray很好,但EDept不作为阵列!!

这是PSScript:

$Header = @{}
$Header.Add("ID", "JOPP")

$message = @{}
$message.Add("Emp", "All")
$message.Add("EId", "001")
$EDept = @("Computers", "Electronics", "Electricals")
$message.Add("EDept", $EDept)
$Header.Add("Message", $message)

$anotherArray = @("E1", "E2", "E3")
$Header.Add("AnotherArray", $anotherArray)

$main= @{}
$main.Add("Header", $Header)

$mainjson = $main | ConvertTo-Json

Write-Output ($mainjson)

但我得到的输出是:

{
    "Header":  {
                   "Message":  {
                                   "EDept":  "Computers Electronics     Electricals",
                                   "EId":  "001",
                                   "Emp":  "All"
                               },
                   "AnotherArray":  [
                                        "E1",
                                        "E2",
                                        "E3"
                                    ],
                   "ID":  "JOPP"
               }
}

如果你在这里看到我的AnotherArray很好但是#34; EDept"采用单个字符串而不是数组。我以同样的方式对抗两者。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

这是一个简单的解决方法。在-depth

的通话中使用ConvertTo-Json参数
$mainjson = $main| ConvertTo-Json -depth 99

Write-Output ($mainjson )
{
    "Header":  {
                   "Message":  {
                                   "EDept":  [
                                                 "Computers",
                                                 "Electronics",
                                                 "Electricals"
                                             ],
                                   "EId":  "001",
                                   "Emp":  "All"
                               },
                   "AnotherArray":  [
                                        "E1",
                                        "E2",
                                        "E3"
                                    ],
                   "ID":  "JOPP"
               }
}

这已经咬了我很多次,并且是PowerShell中我认为他们出错的少数事情之一。

答案 1 :(得分:1)

ConvertTo-JsonDepth parameter指定结果JSON中包含多少级别的包含对象。在您的情况下,添加-Depth 3就足够了,您将得到预期的结果。

或者,您可以使用Newtonsoft.Json module,其ConvertFrom-JsonNewtonsoftConvertTo-JsonNewtonsoft cmdlet是Newtonsoft.Json的包装。