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

如何在PowerShell中合并具有动态属性的JSON对象?

解决PowerShell动态属性JSON对象合并问题

我太懂你在Azure DevOps流水线里遇到的这个JSON合并糟心事了——之前试的那些方法要么把数据覆盖了,要么输出的结果完全乱套,根本达不到预期。其实核心是要处理动态顶层属性的合并,不是简单的字符串拼接或者固定属性对象合并,用PowerShell的对象操作就能完美搞定。

具体实现思路&代码

咱们先把JSON转成PowerShell可操作的自定义对象,再把第二个对象的所有动态属性逐一加到第一个对象里,最后转回JSON就行,完全不会破坏结构:

# 你的原始JSON变量
$aVar = '{ "oldEmployees" : [ { "firstName": "Jane", "lastName": "Doe" }, { "firstName": "John", "lastName": "Doe" } ] }'
$bVar = '{ "newEmployees" : [ { "firstName": "Joe", "lastName": "Doe" } ] }'

# 把JSON字符串转成PowerShell自定义对象
$objA = $aVar | ConvertFrom-Json
$objB = $bVar | ConvertFrom-Json

# 遍历第二个对象的所有属性,添加到第一个对象中
foreach ($property in $objB.PSObject.Properties) {
    $objA | Add-Member -MemberType NoteProperty -Name $property.Name -Value $property.Value -Force
}

# 转换回JSON字符串(-Compress可选,适合Azure流水线压缩字符,避开4K上限)
$mergedJson = $objA | ConvertTo-Json -Depth 10 -Compress

为什么这个方法靠谱?

  • 对比Join:直接拼字符串会把JSON结构搞崩,输出的内容根本不是有效的JSON;咱们操作的是对象,完美保留层级关系
  • 对比Merge/Combine-Object:这些工具大多针对固定属性的对象,遇到动态属性很容易覆盖或遗漏;通过遍历PSObject.Properties能精准抓取所有动态属性,确保一个都不丢
  • -Depth 10参数别忘:如果你的JSON嵌套层级深,得调整这个值防止内容被截断;-Compress对Azure流水线特别友好,能压缩字符数,刚好避开变量4K上限

运行后你就能得到完全符合预期的结果:

{ "oldEmployees": [ { "firstName": "Jane", "lastName": "Doe" }, { "firstName": "John", "lastName": "Doe" } ], "newEmployees": [ { "firstName": "Joe", "lastName": "Doe" } ] }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:20:51