使用PowerShell处理JSON字符串

4
假设我有一个存储在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,该类型不允许添加属性。因此,第3行会出现以下错误:Exception setting "bar": "The property 'bar' cannot be found on this object. Verify that the property exists and can be set."问题:有没有最佳方法在不增加太多复杂性的情况下解决这个问题?
1个回答

9

自定义对象确实允许您添加属性,只要操作正确即可。您需要使用Add-Member cmdlet。

$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-Member行可以简化为:
$o | Add-Member 'bar' 'World'

我不确定这种语法何时变得可接受,但我知道它在v4中可以工作,而且我认为它也可以在v3中工作。


不错,更简单的$o | Add-Member 'bar' 'World'确实可行。虽然不像简单赋值那么简单,但已经足够好了。谢谢! - David Ebbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接