Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vim 8.0 Advent Calendar 4 日目 JSON サポート

$
0
0

この記事は Vim 8.0 Advent Calendarの 4 日目の記事です。

チャンネルやジョブが追加されたのに合わせて、外部と JSON でのやり取りを行うことを想定して、JSON サポートが追加されました。

エンコード/デコードする

json_encode()json_decode()を使うことで、Vim の内部データと JSON 文字列を相互に変換できます。

let obj = {'users': [{'name': 'thinca','lang': 'vim'}]}
let json = json_encode(obj)
echo json
" => {"users":[{"lang":"vim","name":"thinca"}]}
echo json_decode(json)" => {'users': [{'lang': 'vim', 'name': 'thinca'}]}

追加された値

Vim script には、true/falseなどの bool 値や、nullなどの値は存在しませんでした。
このままだと JSON と相互に変換するのに支障が出るため、新しくこれらを表す値が追加されました。

  • v:false
  • v:true
  • v:null
  • v:none

これらによって、bool 値や null を含む JSON も正しく相互変換されます。

let json ='{"is_vimmer":true,"has_free_time":false,"future":null}'let obj = json_decode(json)
echo obj
" => {'future': v:null, 'is_vimmer': v:true, 'has_free_time': v:false}
echo json_encode(obj)" => {"future":null,"is_vimmer":true,"has_free_time":false}

js_encode()js_decode()

チャンネルには JSON モードの他に JS モードがありました。これらに対応する js_encode()js_decode()があります。これらは JavaScript のオブジェクトのような形式を扱います。

letjs='{vimmers:["thinca",,],}'let obj = js_decode(js)
echo obj
" => {'vimmers': ['thinca', v:none]}
echo js_encode(obj)" => {vimmers:["thinca",,]}
  • オブジェクトのキーは必要がなければダブルクォートで囲われません。
  • 末尾カンマを許容します。
  • 配列内の空の要素(連続するカンマ)を許容し、この場合は v:noneが使われます。

かなり特殊な値になるので、通常は JSON を使えばよいでしょう。


Viewing all articles
Browse latest Browse all 5608

Trending Articles