PandocでLuaオブジェクトをJSON文字列化する

by
カテゴリ:

ドキュメントの相互変換ツールであるPandocは、Lua言語のインタプリタを内蔵しており、便利なモジュールも様々に提供しています。
本来はLuaフィルタという、ドキュメント変換処理に割り込みをかけるために持っている機能ですが、pandoc luaでインタプリタを起動したり、pandoc lua hoge.luahoge.luaを実行したりもできちゃいます。

濫用してあげると、以下のようにLuaのオブジェクトをJSON化して出力できます。

echo "print(pandoc.json.encode({ a = 1, b = {'x', 'y', 'z'} }))" | pandoc lua -
#> {"a":1,"b":["x","y","z"]}

もちろん、上記の例のようにデータをスクリプトに直書きするなら、最初からJSONにしておけばいいのです。

Luaフィルタから静的なデータを別ファイルに分離していて、更にLuaフィルタ以外でもデータを使いたいようなニッチなケースでは便利かもしれません。

echo "return {a = 1, b = {'x', 'y', 'z'}}" > /tmp/data.lua
echo "print(pandoc.json.encode(dofile('/tmp/data.lua')))" | pandoc lua - | jq .a
#> 1

データの管理方法としては、そもそもJSONファイルを扱う方が素直です。
LuaオブジェクトをJSON文字列化するpandoc.json.encode関数があるように、JSON文字列をLuaオブジェクト化するpandoc.json.decode関数を利用できます。
あえて、Luaスクリプトでデータを管理するメリットがあるとしたら、型アノテーションやコメントが可能なこと、エディタの補完が利用可能なことあたりでしょうか。

ENJOY!


約一ヶ月ぶりのブログ更新でした。少しずつブログも再開していきたいですね