删除与PowerShell中的正则表达式匹配的JSON对象属性
给出一个json对象示例,如:删除与PowerShell中的正则表达式匹配的JSON对象属性,json,powershell,Json,Powershell,给出一个json对象示例,如: { "Id": 1, "Name": "Pablo", "UnwantedProperty1XOXO": true, "UnwantedProperty2XOXO": false, ... } 我想删除以XOXO结尾的所有属性(因此正则表达式类似于/.+XOXO$) 如何删除名称与PowerShell正则表达式匹配的所有属性?(使用JSON对象或PowerShell对象) 我可以像这样从PowerShell对象中删除属性,但它似乎不适用于正则
{
"Id": 1,
"Name": "Pablo",
"UnwantedProperty1XOXO": true,
"UnwantedProperty2XOXO": false,
...
}
我想删除以XOXO
结尾的所有属性(因此正则表达式类似于/.+XOXO$
)
如何删除名称与PowerShell正则表达式匹配的所有属性?(使用JSON对象或PowerShell对象)
我可以像这样从PowerShell对象中删除属性,但它似乎不适用于正则表达式:
$myObject.PSObject.Properties.Remove(“someProperty”)
您可以使用获取内容
导入文件的内容,然后使用内置的regex操作符执行此操作
$data = Get-Content C:\Users\U394282\Desktop\test.json
我们希望将$unwantedProps
设置为数组(在本例中,它使用@()符号封装结果,因此它始终具有.Count
属性
$unwantedProps = @($data | ? { $_ -match 'XOXO'})
if($unwantedProps.Count -gt 0)
{
$cleanedData = $data -notmatch 'XOXO'
return $cleanedData
}
else {
return
}
根据JSON文件的结构和删除的索引位置,您可能还需要一个helper函数来检查最后一项是否有逗号,从而使JSON无效:您可以使用
Get content
导入文件的内容,然后使用内置的regex操作符来执行此操作
$data = Get-Content C:\Users\U394282\Desktop\test.json
我们希望将$unwantedProps
设置为数组(在本例中,它使用@()符号封装结果,因此它始终具有.Count
属性
$unwantedProps = @($data | ? { $_ -match 'XOXO'})
if($unwantedProps.Count -gt 0)
{
$cleanedData = $data -notmatch 'XOXO'
return $cleanedData
}
else {
return
}
根据JSON文件的结构以及因此删除的索引位置,您可能还需要一个helper函数来检查最后一项是否有逗号,从而使JSON无效:最可靠的解决方案是不使用基于正则表达式的文本解析,因为它很脆弱(特性值对可能分布在多行中,一个值可能意外地与要排除的特性名称匹配) 相反:
- 使用
执行正确的Json解析到自定义对象(convertfromjson
实例)[pscustomobject]
- …然后使用带有通配符模式的
,排除不感兴趣的属性选择对象-排除
- …并在需要时使用
转换回JSONconverttojson
注意:传递给
选择对象的[-Property]*
参数仅在Windows PowerShell中是必需的;当仅指定-ExcludeProperty
时,PowerShell核心明智地假定-Property*
。最稳健的解决方案是不使用基于正则表达式的文本解析,这是脆弱的(特性值对可能分布在多行中,一个值可能意外地与要排除的特性名称匹配)
相反:
- 使用
convertfromjson
执行正确的Json解析到自定义对象([pscustomobject]
实例)
- …然后使用带有通配符模式的
选择对象-排除
,排除不感兴趣的属性
- …并在需要时使用
converttojson
转换回JSON
注意:传递给选择对象的[-Property]*
参数仅在Windows PowerShell中是必需的;当仅指定了-ExcludeProperty
时,PowerShell核心明智地假定-Property*