Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 298 Vote(s) - 3.47 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to check if file has valid JSON syntax in Powershell

#1
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"
}
Reply

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

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

Reply

#4
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]

)

Reply

#5
**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]

Reply

#6
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.
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through