【问题标题】:ConvertTo-JSON falsely parses arrays [duplicate]ConvertTo-JSON 错误地解析数组 [重复]
【发布时间】: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


    【解决方案1】:

    好吧,显然PowerShell默认只有parses data up to a depth of 2。因此,正如Here 所指出的,您必须使用ConvertTo-Jsondepth 参数指定深度

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      相关资源
      最近更新 更多