文件"array.json":["bogus"]

PS C:\Users\Me> (Get-Content "array.json" | ConvertFrom-Json -NoEnumerate).GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS C:\Users\Me> (Get-Content "array.json" | ConvertFrom-Json).GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

虽然有时可能有用,但绝对不是我意想不到的.下面发布的答案是为了帮助他人,避免混淆.

推荐答案

在PowerShell中,单项数组在返回时展开,请参见:Everything you wanted to know about arrays.

Write-Output -NoEnumerate

PowerShell喜欢解包或枚举array.这是PowerShell使用管道方式的一个核心方面,但有时您不希望发生这种情况.

这可能是PowerShell中最大的How can I force Powershell to return an array when a call only returns one object?6">pitfall/gotcha,并不特定于ConvertFrom-Json cmdlet,请参见例如:How can I force Powershell to return an array when a call only returns one object?.

强制执行数组的最简单(也是最常见)方法是使用Array subexpression operator @( )(而不是Grouping operator ( )):

@('["bogus"]' | ConvertFrom-Json).GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

例如:

@('["bogus"]' | ConvertFrom-Json)[0]
bogus

另请参阅以下问题:unroll array single "Array subexpression operator"

正如100在这个有用的ConvertFrom-Json unpacks arrays with 1 item and behaves oddly with empty object答案中指出的那样,您可能还会注意到PowerShell7+之前的版本在此行为上的不同.

Json相关问答推荐

如何让jq输出长数据集?

NIFI-我需要数组的信息,但只需要第一个信息

无法使用Jolt变换在嵌套的JSON中提取值

如果主对象中已存在属性,则不应在Jolt中引用次对象

规范化JSON数据

在 SQL 存储过程中使用参数 Select 值

使用 jq,如何将两个属性构成键的对象数组转换为对象的索引对象?

如何在 terraform 输出中打印一组用户信息

如何按键过滤

无法在 json --data 中使用变量

使用 jq 和 awk 拆分大型 JSON 文件

缺少所需的请求正文内容:org.springframework.web.method.HandlerMethod$HandlerMethodParameter

使用 Javascript 判断 JSON 对象是否包含值

如何使用 gson 将数据保存在 json 文件中?

如何从 mysql 数据库构建 JSON 数组

使用 JSON 的 javascript 深拷贝

在视图中将 .Net 对象转换为 JSON 对象

使用 Retrofit 解析动态密钥 Json 字符串

使用 JSON.Net 的 C# 到 JSON 序列化

如何在本地存储中存储对象数组?