相关疑难解决方法(0)

为什么在转换JSON时,powershell在单行中给出的结果不同于双行?

概观

从powershell 3提示符,我想调用一个RESTful服务,获得一些JSON,并打印它.我发现如果我将数据转换为powershell对象,然后将powershell对象转换回json,我会得到一个漂亮的漂亮打印字符串.但是,如果我将两个转换组合成一个带管道的单线程,我会得到不同的结果.

TL; DR:这个:

PS> $psobj = $orig | ConvertFrom-JSON
PS> $psobj | ConvertTo-JSON
Run Code Online (Sandbox Code Playgroud)

......给我的结果与此不同:

PS> $orig | ConvertFrom-JSON | ConvertTo-JSON
Run Code Online (Sandbox Code Playgroud)

原始数据

[
  {
    "Type": "1",
    "Name": "QA"
  },
  {
    "Type": "2",
    "Name": "whatver"
  }
]
Run Code Online (Sandbox Code Playgroud)

分两步完成转换

我将删除空格(因此它适合一行...),将其转换为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"
    }
]
Run Code Online (Sandbox Code Playgroud)

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

但是,如果我将最后两个语句组合成一个单行,我会得到不同的结果:

PS> $orig | ConvertFrom-JSON | ConvertTo-JSON …
Run Code Online (Sandbox Code Playgroud)

powershell json

10
推荐指数
2
解决办法
3222
查看次数

如何使用 ConvertTo-Json 将 powershell 数组转换为 json?

观察:

C:\> [array]@(1,2) | ConvertTo-Json
[
    1,
    2
]
C:\> [array]@(1) | ConvertTo-Json
1
C:\> [array]@() | ConvertTo-Json
C:\>
Run Code Online (Sandbox Code Playgroud)

(我希望分别来自最后两个案例的 [1] 和 [])

那么,如果我想使用标准ConvertTo-Json方法,即使数组包含 1 或 0 个元素,我如何可靠地做到这一点?

请注意,当数组是转换为 json 的复杂对象的一部分时,对结果进行后处理是不可行的。

编辑 1

C:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.17763.592
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17763.592
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1


C:\> [array]@(1) | ConvertTo-Json -AsArray
ConvertTo-Json : A parameter cannot be found that matches parameter name 'AsArray'.
At line:1 char:30 …
Run Code Online (Sandbox Code Playgroud)

powershell json

5
推荐指数
2
解决办法
2414
查看次数

标签 统计

json ×2

powershell ×2