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

PowerShell向JSON文件添加新对象不符合预期,求解决方案

问题分析与解决方案

原代码错误点

  • 操作对象错误:你用$json.test | Add-Member给整个数组对象添加属性,而非数组内的单个元素,导致JSON结构混乱。
  • 循环逻辑冗余:遍历$json.test的元素,但未使用循环变量$user,反而重复操作整个数组,且每次循环都写入文件,造成结果覆盖。

修正方案(按预期结果)

假设你的初始JSON文件add.json内容如下:

{
    "test": [
        {
            "displayName": "hello",
            "exceptionName": "hello",
            "idk": "anymore"
        }
    ]
}

如果要将原对象拆分为两个独立对象并添加到数组,得到预期结果,可使用以下代码:

$jsonfile = "C:\Users\Public\add.json"

# 读取JSON并转换为对象
$json = Get-Content $jsonfile -Raw | ConvertFrom-Json

# 获取数组中的原对象
$originalItem = $json.test[0]

# 创建新对象,包含指定属性
$newItem = [PSCustomObject]@{
    idk = $originalItem.idk
    yikes = 'if this works'
}

# 保留原对象的指定属性(移除idk)
$json.test[0] = $originalItem | Select-Object displayName, exceptionName

# 将新对象添加到数组
$json.test += $newItem

# 转换为JSON并写入文件(-Depth 10避免深层属性丢失)
$json | ConvertTo-Json -Depth 10 | Set-Content $jsonfile

如果只是需要在test数组中新增一个独立对象,可简化为:

$jsonfile = "C:\Users\Public\add.json"

$json = Get-Content $jsonfile -Raw | ConvertFrom-Json

# 创建新对象
$newItem = [PSCustomObject]@{
    idk = "anymore"
    yikes = "if this works"
}

# 添加到数组
$json.test += $newItem

# 写入文件
$json | ConvertTo-Json -Depth 10 | Set-Content $jsonfile

关键注意事项

  • 使用-Raw参数读取JSON:Get-Content -Raw可以一次性读取整个文件,避免Out-String的冗余操作。
  • 指定-Depth参数:ConvertTo-Json默认深度为2,复杂对象需要手动指定更高深度,防止属性丢失。
  • 操作数组元素而非数组本身:要修改或添加数组内的对象,需直接针对数组的元素(如$json.test[0])或使用+=新增元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:41:34