gpt4 book ai didi

json - 为什么在转换 JSON 时,powershell 在单行和两行中给出不同的结果?

转载 作者:行者123 更新时间:2023-12-04 02:58:57 25 4
gpt4 key购买 nike

概述

在 powershell 3 提示符下,我想调用一个 RESTful 服务,获取一些 JSON,然后漂亮地打印它。我发现如果我将数据转换为 powershell 对象,然后将 powershell 对象转换回 json,我会得到一个 pretty-print 字符串。但是,如果我将这两种转换组合成一个带管道的单衬管,我会得到不同的结果。

TL;DR: 这:

PS> $psobj = $orig | ConvertFrom-JSON
PS> $psobj | ConvertTo-JSON

...给我的结果与此不同:
PS> $orig | ConvertFrom-JSON | ConvertTo-JSON

原始数据
[
{
"Type": "1",
"Name": "QA"
},
{
"Type": "2",
"Name": "whatver"
}
]

分两步进行转换

我将删除空格(因此它适合一行...),将其转换为 powershell 对象,然后将其转换回 JSON。这很好用,并给了我正确的数据:
PS> $orig = '[{"Type": "1","Name": "QA"},{"Type": "2","Name": "DEV"}]'
PS> $psobj = $orig | ConvertFrom-JSON
PS> $psobj | ConvertTo-JSON
[
{
"Type": "1",
"Name": "QA"
},
{
"Type": "2",
"Name": "DEV"
}
]

将两个步骤与管道结合起来

但是,如果我将最后两个语句组合成一条语句,我会得到不同的结果:
PS> $orig | ConvertFrom-JSON | ConvertTo-JSON
{
"value": [
{
"Type": "1",
"Name": "QA"
},
{
"Type": "2",
"Name": "DEV"
}
],
"Count": 2
}

注意键“value”和“Count”的添加。为什么有区别?我确信这与返回 JSON 对象而不是 JSON 数组的愿望有关,但我不明白为什么我进行转换的方式会影响最终结果。

最佳答案

解决方案是将前两个操作用括号括起来:

PS C:\> ($orig | ConvertFrom-JSON) | ConvertTo-JSON
[
{
"Type": "1",
"Name": "QA"
},
{
"Type": "2",
"Name": "DEV"
}
]

括号允许您一次获取前两个操作的输出。没有它们,powershell 将尝试解析它单独获取的任何对象。收藏 PSCustomObject源自 $orig | ConvertFrom-JSON包含两个 PSCustomObjects对于 1/QA 和 2/DEV 对,因此通过管道输出该集合的输出,powershell 尝试一次处理一个键/值对。

使用括号是“分组”输出的一种更短的方式,允许您在不创建变量的情况下对其进行操作。

关于json - 为什么在转换 JSON 时,powershell 在单行和两行中给出不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com