我正在对我们环境中的服务器进行分析,其中通过PowerShell检索数据,并 for each 服务器创建一个JSON文件.事实证明,有些JSON的格式不正确,我需要遍历所有文件,找到格式不正确的文件,并删除不正确的部分.以下是格式错误的文件的示例:

{
"value":  [
              {
                  "Server":  "SERVERNAME",
                  "Name":  "SHARE",
                  "ScopeName":  "*",
                  "Path":  "",
                  "Description":  "",
                  "ShareState":  1,
                  "AvailabilityType":  0,
                  "ShareRights":  [

                                  ],
                  "ShareSddl":  "",
                  "ShareRoot":  [

                                ],
                  "TotalFileCount":  35,
                  "TotalDirectoryCount":  47,
                  "TotalFolderSizeBytes":  "",
                  "TotalFolderSizeInMB":  "",
                  "TotalFolderSizeInGB":  "",
                  "TreeSizeDirFailed":  null,
                  "TreeSizeFileFailed":  null,
                  "TreeErrorHistory":  null
              }
          ],
"Count":  10 (This number varies)
}

我需要做的是删除以下部分:

{
"value":  [

,
"Count":  10 (This number varies)
}

我试过用-replaceString.Replace(),但没有成功...上面的部分仍然存在.下面是我所做的一个例子,但仅用于测试,它只侧重于删除结尾部分.我怎样才能着手修复这个问题,这样更换才能正常工作?谢谢!

$Files = Get-ChildItem -path ""

$StartMatch = @"
{
    "value":  
"@

$EndMatch = @"
,
    !!!ROW!!!
}
"@

ForEach ($File in $Files){
    Write-Host "■ Checking file: $File"
    $Contents = (Get-Content -Path "$File")
    if ($Contents.StartsWith($StartMatch)){
        Write-Host "Match" -ForegroundColor Green #test print
        Write-Host "-Checking EOF... " -NoNewline
        if (($Contents | Select-Object -Last 3) -like "*Count*"){
            Write-Host "Match" -ForegroundColor Green
            $EOFMatch = $EndMatch -replace "!!!ROW!!!", $Contents[$Contents.length - 2]
            Write-Host $EOFMatch -ForegroundColor Yellow
            $Contents = $Contents -replace $EOFMatch, ""
            $Contents #test print

            Break #testing only
        }
    }else{
        Write-Host "No match"#test print
    }
}

推荐答案

因为您对.value属性中的对象感兴趣,所以这可能和读取文件一样简单-&>;解析ConvertFrom-Json->;获得.value属性的值->;将该值转换回Json:

Get-ChildItem -Filter *.json | ForEach-Object {
    (Get-Content $_.FullName -Raw | ConvertFrom-Json).value |
        ConvertTo-Json -Depth 99
}

Json相关问答推荐

PowerShell:使用JSON原生的Short命令处理JSON?

用巨大的值更新SQL Server中的nvarchar(max)

NoneType 对象的 Python 类型错误

jq 对特定键进行过滤并将值整理到单个 csv 单元格中

Jolt 不打印任何东西

如何在 Apache NiFi 中使用 JoltTransformJson 删除流文件或具有空字段的整个对象?

使用 jq 将消息转换为数组

Golang 解组行为:字段过多?

我如何将 JSON 格式与 flutter 一起使用?帮助使用 Gamebanana api

将 JSON 解组为具有唯一元素的 map 切片

Spring MVC 4:application/json内容类型设置不正确

直接从 Java 中的模型类创建 JSON 对象

如何创建 JSON 对象 Node.js

如何在 Rails 模型中验证字符串是否为 json

Peewee 模型转 JSON

有没有办法在 angular.json 中扩展配置?

PHP json_encode json_decode UTF-8

在android中使用GSON解析带有动态key和value的JSON

如何从 MVC 控制器返回 Json 对象以查看

JSON.stringify 向我的 Json 对象添加额外的 \ 和 "" 的问题