我正在尝试编写一个读取文件的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"
}
答案 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"
}