2015-01-14 2 views
4

Предположим, что у меня есть часть JSON в строке PowerShell, например.Использование PowerShell для обработки строки JSON

$s = '{"foo":"hello"}' 

Моя цель состоит в том, чтобы превратить это объект, который можно манипулировать (например, изменение/добавление свойств), а затем преобразовать обратно в строку JSON.

Так пытается очевидное, я пишу:

$o = $s | ConvertFrom-Json # convert the json string to an object 
$o.foo = "hello2"    # change an existing prop 
$o.bar = "World"    # add a new prop 
$s2 = $o | ConvertTo-Json  # convert back into a json string 

Проблема заключается в том, что объект, который я вернусь из ConvertFrom-Json имеет тип PSCustomObject, который не позволяет добавлять свойства. Таким образом, третья линия взрывает с:

Exception setting "bar": "The property 'bar' cannot be found on this object. Verify that the property exists and can be set." At line:1 char:1

Вопрос:, что это лучший способ приблизиться к этому, не принося слишком много сложности?

ответ

6

Пользовательские объекты do позволяют добавлять свойства, вам просто нужно сделать это правильно. Вам нужен командлет Add-Member.

$o = $s | ConvertFrom-Json # convert the json string to an object 
$o.foo = "hello2"    # change an existing prop 
Add-Member -InputObject $o -MemberType NoteProperty -Name 'bar' -Value "World"    # add a new prop 
$s2 = $o | ConvertTo-Json  # convert back into a json string 

Стоит отметить, что в зависимости от версии PowerShell, что Add-члены линии может быть упрощено:

$o | Add-Member 'bar' 'World' 

Я не уверен, что версия, что синтаксис стал приемлемым, но я знаю, он работает в v4, и я думаю, что он работает в v3.

+0

Ницца, проще '$ o | Add-Member 'bar' 'World'' действительно работает. Не так просто, как простое назначение, но достаточно хорошее. Благодаря! –

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