0Day Forums
How to check if file has valid JSON syntax in Powershell - Printable Version

+- 0Day Forums (https://0day.red)
+-- Forum: Coding (https://0day.red/Forum-Coding)
+--- Forum: PowerShell & .ps1 (https://0day.red/Forum-PowerShell-ps1)
+--- Thread: How to check if file has valid JSON syntax in Powershell (/Thread-How-to-check-if-file-has-valid-JSON-syntax-in-Powershell)



How to check if file has valid JSON syntax in Powershell - pulverable380 - 07-21-2023

I am trying to write a powershell script that reads a file and prints "true" if it is a valid JSON file. I am using Powershell v3.0 and this is what I have right now :

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





How do I check the return code? I mean I want something like this :

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


RE: How to check if file has valid JSON syntax in Powershell - guanabara288 - 07-21-2023

I don't think that it exists an other solution than catching the exception using `ConvertFrom-Json`.


RE: How to check if file has valid JSON syntax in Powershell - hoised152758 - 07-21-2023

ConvertFrom-JSON would work but only for a JSON object < 2MB in size.
For higher you can use JavaScriptSerializer class

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"
}




RE: How to check if file has valid JSON syntax in Powershell - clothesline508 - 07-21-2023

If you encounter this question and can use PowerShell 6 or later, there is now a Test-Json cmdlet. It can also not just validate that it's valid JSON, but that it conforms to a particular JSON schema using the `-Schema` param.

## Example ##

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

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

## ARM Template Warning ##

A note for users looking to validate an ARM template via `-Schema` (I can't imagine a more perfect use case). At the time of writing, there are one or more bugs in the underlying library `Test-Json` uses for validation, NJsonSchema, and it is not possible to validate an ARM template.

### GitHub Issues ###

* [PowerShell Issue #9560](

[To see links please register here]

)
* [NJsonSchema Issue #588](

[To see links please register here]

)




RE: How to check if file has valid JSON syntax in Powershell - heliocentricity631167 - 07-21-2023

**UPDATE 2021: PowerShell 6 and newer versions**

PowerShell 6 brings a brand new `Test-Json` cmdlet. [Here is the reference][1].

You can simply pass the raw file content directly to the `Test-Json` cmdlet.

```
$text = Get-Content .\filename.txt -Raw

if ($text | Test-Json) {
$powershellRepresentation = ConvertFrom-Json $text -ErrorAction Stop;
Write-Host "Provided text has been correctly parsed to JSON";
} else {
Write-Host "Provided text is not a valid JSON string";
}
```




**PowerShell 5 and earlier versions**

There is no `Test-Json` cmdlet in these versions, so the best way is to put your `ConvertFrom-Json` cmdlet inside a `try ... catch` block

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]:

[To see links please register here]




RE: How to check if file has valid JSON syntax in Powershell - verboten147 - 07-21-2023

ConvertFrom-Json shd be the appropriate way to go.
Test-Json unfortunately has alot of known unsupported JSON Types.
I.E. it cannot parse Json-Arrays or Primitives properly leading to falsely assuming it has wrong JSON-Syntax.