给出一个示例json对象,例如:
{
"Id": 1,
"Name": "Pablo",
"UnwantedProperty1XOXO": true,
"UnwantedProperty2XOXO": false,
...
}
我想删除所有以XOXO
结尾的属性(因此正则表达式类似于/.+XOXO$
)。
如何使用PowerShell删除名称与正则表达式匹配的所有属性?(使用JSON对象或PowerShell对象)
我可以像这样从PowerShell对象中删除属性,但它似乎不适用于正则表达式:
$myObject.PSObject.Properties.Remove("someProperty")
答案 0 :(得分:2)
最健壮的解决方案是 not 而不是使用基于正则表达式的文本解析,这是 britttle (可能会传播属性值对跨多行,值可能会意外地与属性 name 匹配以排除)。
相反:
ConvertFrom-Json
对自定义对象([pscustomobject]
实例)执行正确的JSON解析 ... ...,然后使用带有{em>通配符模式的Select-Object -Exclude
排除不感兴趣的属性 ...
...,并根据需要使用ConvertTo-Json
转换回JSON。
Get-Content -Raw file.json |
ConvertFrom-Json |
Select-Object * -ExcludeProperty *XOXO |
ConvertTo-Json
注意:仅在 Windows PowerShell 中需要传递给[-Property] *
的{{1}}参数;仅指定Select-Object
时,PowerShell Core 明智地假定 -Property *
。
答案 1 :(得分:1)
您可以使用long_string.match(/\S.+?(?=( THS&)|$)/g)
导入文件的内容,然后使用内置的正则表达式运算符来执行此操作。
Get-Content
我们想将$data = Get-Content C:\Users\U394282\Desktop\test.json
设置为一个数组(在本示例中,它使用@()符号来封装结果,因此它始终具有$unwantedProps
属性
.Count
根据JSON文件的结构以及由此删除的索引位置,您可能还希望有一个辅助函数,该函数将检查最后一项是否有逗号,从而使JSON无效: