You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中ConvertTo-JSON输出含Value和Count的原因及函数内修复方法

PowerShell中ConvertTo-JSON输出value和Count字段的原因及解决方法

一、value和Count字段的来源

这两个字段的出现和PowerShell的返回值处理逻辑、你写的函数返回代码直接相关:

  • Count字段:来自PowerShell为数组类型额外添加的Count成员属性,作用和数组原生的Length属性一致,是PowerShell为了统一集合类型长度获取方式而添加的。
  • value字段:你的函数里写了return ,@($allJSON),这里做了两层多余的包装操作:
    1. $allJSON本身已经是包含$TestJSON的数组,@($allJSON)属于重复包装数组;
    2. 前缀的逗号,是强制将这个数组变成单元素嵌套数组(数组里再套一个数组)。
      当这个嵌套数组通过管道传给ConvertTo-JSON时,PowerShell没有展开外层数组,而是将其当作带属性的对象处理,把内层数组序列化为value属性,同时把数组长度序列化为Count属性。

二、修改函数实现无需括号调用

只需要调整函数的返回逻辑,去掉多余的包装即可,有两种可行方式:

方式1:直接返回已有的数组

$allJSON本身就是数组,直接返回它即可:

$TestJSON = @{
    name1="value1";
    name2="value2";
}
  
function Get-JSON {
    $allJSON = @()
    $allJSON += $TestJSON
    return $allJSON
}

Get-JSON | ConvertTo-Json

方式2:用逗号直接包装原数组(避免自动展开)

如果需要确保即使数组只有一个元素,也不会被PowerShell自动展开(比如后续有其他管道操作),可以用逗号直接包装$allJSON,不需要额外的@():

$TestJSON = @{
    name1="value1";
    name2="value2";
}
  
function Get-JSON {
    $allJSON = @()
    $allJSON += $TestJSON
    return ,$allJSON
}

Get-JSON | ConvertTo-Json

两种方式的输出都会是正常的JSON数组:

[
    {
        "name1":  "value1",
        "name2":  "value2"
    }
]

内容的提问来源于stack exchange,提问作者Captain_Planet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:13:22