導入
JSON を使う機会は多いと思います。特に REST API では JSON を渡すことが多いですが、コンピュータが扱う JSON は改行が適宜入っておらず、人間が読みやすい形になっていません。しかも仕事で扱う JSON にはいろいろなデータが含まれており、とても長くて複雑です。かつカッコの対応も非常にわかりにくくなります。これを人間がそのまま読むのは至難の業です。
まさかとは思いますが「手動で改行をひたすら入れる」とかやってる人はいませんよね?
エンジニアなんですから、そんなことやってたらダメです。
jq
そこで jq というツールを使うのですが、こいつを Emacs から使う方法を示します。
まず jq をインストールして普通にターミナルで使える状態にしておいてください。
Emacs から jq を使う
(defun jq-format (beg end)
(interactive "r")
(shell-command-on-region beg end "jq ." nil t))
(defun jq-compact (beg end)
(interactive "r")
(shell-command-on-region beg end "jq -c ." nil t))
こんなのを init.el に書けば設定は終わりです。簡単!
使い方
Emacs で整形したい JSON をリージョン選択し、
M-x jq-format
とすると、人間が読みやすい形に改行とインデント(字下げ)を適宜入れてくれます。
M-x jq-compact
とすると、改行とインデントをすべて取り払って一行にしてくれます。修正した JSON を再度テストしたい場合に便利かも知れません。
というのは、curl コマンドは整形済みの適宜改行が入っている JSON も扱えますから、わざわざ改行がないフォーマットに戻す必要はないのです。人間が読みやすい形の JSON をそのまま扱うように、テスト運用環境の移行を提案するほうが良いかも知れません。
サンプル
web システムが吐き出す JSON の例です。
人間の読みやすさなんてヤツは何も考えてません(笑)
{"name":"山田太郎","age":28,"isStudent":false,"skills":["JavaScript","HTML","CSS"],"address":{"city":"大阪市","area":"北区"}}
こんな JSON を解析しなければならないとき、このままでは読み辛くて仕方ありません。
萎えますね。
{
"name": "山田太郎",
"age": 28,
"isStudent": false,
"skills": [
"JavaScript",
"HTML",
"CSS"
],
"address": {
"city": "大阪市",
"area": "北区"
}
}
先ほど示した方法ならば、このように読みやすい形に一瞬で整形できます。
これなら解析も楽です。
蛇足
JSON に BOM が入り込むと大変な目に遭います。Emacs などのまともなエディタの使用を強く推奨します。
おわりに
今回は Emacs から jq を使って JSON を素早く整形する方法を解説しました。
作業を工夫することは、省力化だけでなく作業ミス防止にも役立ちます。
よいエンジニアライフを!