Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除与PowerShell中的正则表达式匹配的JSON对象属性_Json_Powershell - Fatal编程技术网

删除与PowerShell中的正则表达式匹配的JSON对象属性

删除与PowerShell中的正则表达式匹配的JSON对象属性,json,powershell,Json,Powershell,给出一个json对象示例,如: { "Id": 1, "Name": "Pablo", "UnwantedProperty1XOXO": true, "UnwantedProperty2XOXO": false, ... } 我想删除以XOXO结尾的所有属性(因此正则表达式类似于/.+XOXO$) 如何删除名称与PowerShell正则表达式匹配的所有属性?(使用JSON对象或PowerShell对象) 我可以像这样从PowerShell对象中删除属性,但它似乎不适用于正则

给出一个json对象示例,如:

{
  "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无效:

最可靠的解决方案是不使用基于正则表达式的文本解析,因为它很脆弱(特性值对可能分布在多行中,一个值可能意外地与要排除的特性名称匹配)

相反:

  • 使用
    convertfromjson
    执行正确的Json解析
    到自定义对象(
    [pscustomobject]
    实例)
  • …然后使用带有通配符模式的
    选择对象-排除
    ,排除不感兴趣的属性

  • …并在需要时使用
    converttojson
    转换回JSON


注意:传递给
选择对象的
[-Property]*
参数仅在Windows PowerShell中是必需的;当仅指定
-ExcludeProperty
时,PowerShell核心明智地假定
-Property*

最稳健的解决方案是不使用基于正则表达式的文本解析,这是脆弱的(特性值对可能分布在多行中,一个值可能意外地与要排除的特性名称匹配)

相反:

  • 使用
    convertfromjson
    执行正确的Json解析
    到自定义对象(
    [pscustomobject]
    实例)
  • …然后使用带有通配符模式的
    选择对象-排除
    ,排除不感兴趣的属性

  • …并在需要时使用
    converttojson
    转换回JSON

注意:传递给
选择对象的
[-Property]*
参数仅在Windows PowerShell中是必需的;当仅指定了
-ExcludeProperty
时,PowerShell核心明智地假定
-Property*