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. |