それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

JSONにシンタックスチェックに使えるコマンド

JSONのシンタックスチェックをコマンドから行いたいと思いました

いくつかの選択肢がある

  1. node.js のJSON.parseを使う
  2. jq コマンドを使う
  3. 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はインストールして不要で使えるっぽいので便利。