2016-08-03 20 views
2

Я следующие два объекта, которые получили от 2 Json файла с помощью:слияние два Jsons в PowerShell

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

Heres из положить после преобразования:

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} 

мне нужно объединить эти два объекта Json в powershell, и я попробовал следующее:

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 

Есть ли еще один элегантный способ doin g, если я делаю это неправильно или почему я получаю эту ошибку?

+1

Просить «объединить два JSONs» не имеет смысла, чем просить «слить фотографию и видео». Это вполне возможно - как только вы решите, хотите ли вы, чтобы изображение было в начале, в конце, в качестве наложения в определенном месте, вставили каждый другой кадр в качестве прозрачного водяного знака в какой-то угол, в большем кадре рядом с видеоизображением ... JSON не является структурой данных, это формат сериализации для многих структур данных. Они не обязательно будут меситься вместе - вам нужно разблокировать, что такое структуры данных и как именно они вам нужны, чтобы слиться. – TessellatingHeckler

ответ

2

$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 
+1

Что делать, если у Env было более одного имущества? Можно добавить и объединить их вместе? – Scooby

+0

@Scooby вы можете перебирать '$ Env.PSObject.Properties' и программно добавлять каждого члена. – briantist

+0

Можете ли вы привести пример для этого с составленными значениями? – Scooby

Смежные вопросы