JSONのシンタックスチェックをコマンドから行いたいと思いました
いくつかの選択肢がある
- node.js のJSON.parseを使う
- jq コマンドを使う
- json_pp コマンドを使う
nodeの JSON.parse関数をコマンドで実行する
nodeAPI関数群をshell から呼び出せる node2bash を使う。
git clone https://gist.github.com/f5a6fb560dc357835122.git
chmod +x node2bash.js
ln -s node2bash.js ./JSON.parse
echo '{"a": 1}' > manifest.json
./JSON.parse manifest.json
エラーの時
ちゃんとエラ―が表示されて嬉しい。
$ echo "{'a': 1}" > manifest.json
$ ./JSON.parse manifest.json
undefined:1
{'a': 1}
^
SyntaxError: Unexpected token '
at parse (native)
at Object.<anonymous> (/usr/local/bin/JSON.parse:34:9)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:901:3
jq でもシンタックスチェック
$ echo "{'a': 1}" > manifest.json
$ cat manifest.json | jq .
parse error: Invalid numeric literal at line 1, column 5
json_pp コマンドを使う
Mac OSX mavericks に初めから入っていたコマンド json_pp。ppはpretty print の略かな。ちなみに中身はperl
$ echo '{"a": 1}' > manifest.json
$ cat manifest.json | json_pp
{
"a" : 1
}$ echo "{'a': 1}' > manifest.json
$ cat manifest.json | json_pp
unexpected end of string while parsing JSON string, at character offset 2 (before "a': 1}\n") at /usr/bin/json_pp5.16 line 45.
自分的まとめ
個人的には JSON.paarse のエラー出力のほうが見やすいので好き。
JSONを色付けやインデントつけたり出来るので jq 便利。
json_ppはインストールして不要で使えるっぽいので便利。