Sometimes you might need to check if json is valid directly in CLI. You can validate if json has correct structure easily with command line utility “jq“.
So imagine you have two json files, one is valid and another one – corrupted:
[root@linux ~]# cat good.json
{"name":"John", "age":30, "car":null}
[root@linux ~]# jq '.' good.json
{
"name": "John",
"age": 30,
"car": null
}
[root@linux ~]# cat bad.json
{"name":"John", "age":30, "car":null
[root@linux ~]# jq '.' bad.json
parse error: Unfinished JSON term at EOF at line 2, column 0
[root@linux ~]#
Validating them is easy, just check the exit code of the following command, like:
[root@linux ~]# [[ $(jq -e . < good.json &>/dev/null; echo $?) -eq 0 ]] && echo "json is valid" || echo "json not valid"
json is valid
[root@linux ~]# [[ $(jq -e . < bad.json &>/dev/null; echo $?) -eq 0 ]] && echo "json is valid" || echo "json not valid"
json not valid
[root@linux ~]#
When used with “-e”, jq sets the exit status of jq to 0 if the last output values was neither false nor null. It sets it to 1 if the last output value was either false or null, or 4 if no valid result was ever produced. Normally jq exits with 2 if there was any usage problem or system error, 3 if there was a jq program compile error, or 0 if the jq program ran.