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はインストールして不要で使えるっぽいので便利。