如何在Powershell中检查文件是否具有有效的JSON语法

时间:2013-06-11 00:44:06

标签: json powershell powershell-v3.0

我正在尝试编写一个读取文件的powershell脚本,如果它是有效的JSON文件则打印“true”。我正在使用Powershell v3.0,这就是我现在所拥有的:

$text = Get-Content .\filename.txt -Raw 
$powershellRepresentation = $text | ConvertFrom-Json

如何查看退货代码?我的意思是我想要这样的东西:

if(file not a JSON file){
 Write-Host "not JSON"
}
else{
 Write-Host "True"
}

4 个答案:

答案 0 :(得分:11)

没有像Test-Json这样的cmdlet,因此最好的方法是将ConvertFrom-Json cmdlet放在try ... catch块中

try {
    $powershellRepresentation = ConvertFrom-Json $text -ErrorAction Stop;
    $validJson = $true;
} catch {
    $validJson = $false;
}

if ($validJson) {
    Write-Host "Provided text has been correctly parsed to JSON";
} else {
    Write-Host "Provided text is not a valid JSON string";
}

答案 1 :(得分:1)

我认为它不存在使用ConvertFrom-Json来捕获异常的其他解决方案。

答案 2 :(得分:0)

ConvertFrom-JSON可以工作但仅适用于JSON对象< 2MB大小。 为了更高,您可以使用JavaScriptSerializer类

try
{
    $jsser = New-Object System.Web.Script.Serialization.JavaScriptSerializer
    $jsser.MaxJsonLength = $jsser.MaxJsonLength * 10
    $jsser.RecursionLimit = 99    

    $outObject = $jsser.DeserializeObject($json)
}
catch
{
    Write-Host "Error converting $text to JSON"
}

答案 3 :(得分:0)

如果遇到此问题并且可以使用PowerShell 6或更高版本,则现在有一个Test-Json cmdlet。它不仅可以验证其是否为有效的JSON,还可以使用-Schema参数来验证其是否符合特定的JSON模式。

$isValid = Get-Content .\filename.txt -Raw | Test-Json 

if($isValid){
 Write-Host "not JSON"
}
else{
 Write-Host "True"
}