【发布时间】:2020-04-20 14:06:59
【问题描述】:
这个问题也在这里得到了回答:
Stackoverflow: Unexpected ConvertTo-Json results? Answer: it has a default -Depth of 2
GitHub: ConvertFrom-Json and ConvertTo-Json breaks arrays
Mircrosoft Docs: ConvertTo-JSON
TL;DR
如果您使用 ConvertTo-JSON 保存 .json 并且它破坏了它,您可能需要指定 -Depth 参数,因为它的默认值是 2,并且它不会解析超过该值的嵌套对象。
原帖:
所以我想加载,然后通过 PowerShell 脚本从 JSON 文件中保存数据。 JSON 在对象中包含一个数组,如下所示:
{
"head": {
"head2": {
"data0": "a",
"data1": "b"
},
"head3": {
"data8": [
"x",
"y",
"z"
],
"data9": "hello"
}
}
}
注意数组“data8”。
现在当我像这样加载和保存文件时:Get-Content test.json | ConvertFrom-JSON | ConvertTo-JSON 我想最终得到完全相同的文件,因为我没有更改任何内容。然而结果是这样的:
{
"head": {
"head2": {
"data0": "a",
"data1": "b"
},
"head3": {
"data8": "x y z",
"data9": "hello"
}
}
}
“data8”已缩减为单个字符串,我很难找出原因。这似乎发生在ConvertTo-JSON 期间,因为当我还没有这样做时,它会给我一个包含 x、y 和 z 的字符串数组。
例如(Get-Content test.json | ConvertFrom-JSON).head.head3.data8 将导致
x
是的
z
和(Get-Content test.json | ConvertFrom-JSON).head.head3.data8 -is [array] 给True
我尝试过的事情:(get-content test.json | convertfrom-json).head.head3.data8
test.json 中的各种编码方法,但是当我将文件保存为 utf8 并将 -encoding utf8 添加到 Get-Content 时,甚至会发生这种情况,所以我认为这与此无关。
为了尝试,我什至在ConvertTo-JSON 中添加了-compress,但也没有用。
【问题讨论】:
标签: arrays json powershell data-conversion