【问题标题】:merging two Jsons in powershell在powershell中合并两个Json
【发布时间】:2016-12-09 17:55:05
【问题描述】:

我有以下两个 Objects ,它们是从 2 个 Json 文件中获取的:

$Env = ConvertFrom-Json "$(get-content "C:\chef\environments.json")"
$Roles = ConvertFrom-Json "$(get-content "C:\chef\roles.json")"

转换后的输出如下:

PS C:\chef> $Env

run_list
--------
{recipe[djin_chef-max_any::default]}


PS C:\chef> $Roles


7-zip             : @{home=%SYSTEMDRIVE%\7-zip}
cookbook_versions :
default           : @{env=development}
modmon            : @{env=dev}
paypal            : @{artifact=%5BINTEGRATION%5D}
seven_zip         : @{url=https://djcm-zip-local/djcm/chef}
task_sched        : @{credentials=XN$q}
windows           : @{password=K1N5}

我需要在 powershell 中合并这两个 Json 对象,我尝试了以下方法:

PS C:\chef> $Roles+$Env
Method invocation failed because [System.Management.Automation.PSObject] does not contain a method named 'op_Addition'.
At line:1 char:1
+ $Roles+$Env
+ ~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Addition:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

如果我做错了或者为什么会出现这个错误,还有其他优雅的方法吗?

【问题讨论】:

  • merge two JSONs 提问比向merge a photo and a video 提问更有意义。这是完全可能的 - 一旦您决定是否要在开始时或结束时将图片作为特定位置的叠加层,每隔一帧插入一次,作为某个角落的透明水印,在视频图像旁边的较大帧中... JSON 不是数据结构,它是许多数据结构的序列化格式。它们不一定会混合在一起 - 您需要取消选择数据结构是什么以及您需要将它们合并到什么程度。

标签: json windows powershell powershell-2.0 powershell-3.0


【解决方案1】:

$Env只有一个属性,所以你可以给$Roles添加一个新成员:

$Roles | Add-Member -NotepropertyName run_list -NotePropertyValue $Env.run_list

此语法在 PowerShell v3 中有效,但您在标签中列出了 v2 和 v2.. 所以对于 v2:

$Roles | Add-Member -MemberType NoteProperty -Name run_list -Value $Env.run_list

【讨论】:

  • 如果 Env 有多个属性怎么办?有什么可以将它们添加并合并在一起的吗?
  • @Scooby 你可以遍历$Env.PSObject.Properties 并以编程方式添加每个成员。
  • 你能提供一个例子吗??
猜你喜欢
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多