我正在编写一个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"采用单个字符串而不是数组。我以同样的方式对抗两者。
我做错了什么?
答案 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-Json
有Depth
parameter指定结果JSON中包含多少级别的包含对象。在您的情况下,添加-Depth 3
就足够了,您将得到预期的结果。
或者,您可以使用Newtonsoft.Json module,其ConvertFrom-JsonNewtonsoft
和ConvertTo-JsonNewtonsoft
cmdlet是Newtonsoft.Json的包装。