json - ConvertFrom-Json : Invalid object passed in, ':' 或 '}' 预期

标签 json powershell scripting

本周早些时候,我问了这个question找到浏览包含 JSON 格式日志信息的文本文件目录并计算每条唯一消息的数量的最佳方法。

我能够根据提供的答案做到这一点。但是,我现在遇到的问题是其中一个文件的格式是 ConvertFrom-JSON 不喜欢的。它抛出错误:

ConvertFrom-Json : Invalid object passed in, ':' or '}' expected.

最初,我认为我可以使用“erroraction -silentlycontinue”来跳过该文件并继续(只有一行,其中没有任何意义)。然而,它似乎是 known issue这不适用于 ConvertFrom-JSON,替代方法是使用 Try/Catch。

我如何使用 try/catch 来绕过一个坏文件?或者是否有另一种方法可以干净地跳过此文件,而不必将其从目录中删除?

这是我开始的内容。虽然不多,但对此提供一些指导就很好了。我还在网上看到一些信息,我会在 ConvertFrom-JSON 之前使用 gc -RawOut-string,但这给了我相同的结果。

try {
 gci -Path "path" | gc | ConvertFrom-Json | Group-Object message -NoElement
}

catch {
 write-host "can't convert file to JSON"
}

finally {

}

最佳答案

您必须将错误处理插入管道中。这就是ForEach-Object会派上用场的:

Get-ChildItem -Path "path" | 
    ForEach-Object -Process {
        try {
            $_ | Get-Content | ConvertFrom-Json
        } catch {
            write-host "can't convert file '$_' to JSON"
        }
    } | Group-Object message -NoElement

成功的转换将被传递。

此外,针对您的错误情况,请考虑使用 Write-Warning 而不是 Write-Host。它似乎最适合这种情况,并且可以由调用者重定向或选择退出。

如果您认为这种情况比警告更不严重,请考虑Write-Verbose,以便调用者可以选择加入。

关于json - ConvertFrom-Json : Invalid object passed in, ':' 或 '}' 预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51699127/

相关文章:

powershell - 目录/文本搜索上的 DISTINCT Select-String 输出

powershell - 方法调用失败,因为 [System.String] 不包含名为 'SelectNodes' 的方法

javascript - 未捕获的 ReferenceError : web3 is not defined at window. onload

python - 根据输入执行查找时出现问题

ios - bool 值不正确

javascript - 使用 Node 中嵌套对象的字符串文字进行 JSON 解析

Java:根据JSON属性id值将JSON数组反序列化为Map<Integer, Object>

c# - json.net 使用 CamelCasePropertyNamesContractResolver 错误地转换 TimeZoneInfo

json - Powershell convertfrom-json |转换为 csv

grails - 如何通过命令 `create-unit-test` 更改 Grails 用于生成单元测试的模板?