JSONビュアーとしてVim(とjq)を使うとすごい便利

  • 145
    Like
  • 0
    Comment
More than 1 year has passed since last update.

jq.gif

JSONを返すようなAPIを作っているとき、いつもは単に目で追うだけだったり、あるいはブラウザの拡張機能とかで誤魔化していましたが、Vimとjqで扱うようにしてからとても捗っています。

jqで整形する

jqという、コマンドラインで使えるJSONパーサーがあります。

Vimからjqを使うのに、次のようなコマンドをvimrcに定義しました。

command! -nargs=? Jq call s:Jq(<f-args>)
function! s:Jq(...)
    if 0 == a:0
        let l:arg = "."
    else
        let l:arg = a:1
    endif
    execute "%! jq \"" . l:arg . "\""
endfunction

バッファ内の文字列全体に対してjqを実行し、変換後の文字列で置き換えます。

例えば、次のようなJSONがあったとして、

{"obj":{"list":[1,1,2,3,5,8,13]},"jstr":"\u3053\u3093\u306B\u3061\u306F\u4E16\u754C","str":"helloworld","num":1}

「:Jq」と実行

{
  "num": 1,
  "str": "helloworld",
  "jstr": "こんにちは世界",
  "obj": {
    "list": [
      1,
      1,
      2,
      3,
      5,
      8,
      13
    ]
  }
}

「:Jq .obj.list」と実行

[
  1,
  1,
  2,
  3,
  5,
  8,
  13
]

なんて風になります。

ばっちりUnicodeエスケープシーケンスの変換が行われて日本語が表示されていますし、色々加工も出来ちゃいます。
欠点はもちろんjqに依存してしまうことですが、普段から良くJSONに触れている方ならjqは入れておいて損はないと思いますよ!

jqのフィルタ機能については、以下のブログがとても参考になります!

vim-jsonを入れてJSONファイルをより見やすくする

JSONを表示するのに、filetypeをjavascriptにしてもいいのですが、どうせならJSON用のfiletypeプラグインを入れてしまうのをオススメします。

↑のgithubのページにスクリーンショットがありますが、filetypeをjavascriptにしたときよりも色分けされるようになりますし、文字列を囲う「"」も省略されて表示されるので、とても見易いです

jqの代わりにpythonで整形する

自分がVimでJSONを整形したいと思ったのも、この投稿がきっかけです。
もし、開発環境にjqを入れれない場合でも、Pythonならだいたい入っているのでこれで代用するのもありだと思います。