Lua → JSON コンバーター
Lua のテーブルを貼り付けてください。JSON をお返しします。
このツールでできること
ゲームの設定ファイル、Redis スクリプト、あるいは nginx の OpenResty ハンドラから取り出した Lua テーブルを JSON にしたい、という場面はよくあります。ここに貼り付ければ一発で変換できます。定数ひとつを直列化するためだけに json.lua や dkjson を入れる必要はありません。
Lua のテーブルは配列部(1 から始まる整数キー)とハッシュ部(文字列キーや混在キー)が同じ構造に同居するため、ちょっと厄介です。コンバーターは形を見分けて処理します。純粋な配列部のテーブルは JSON 配列に、純粋なハッシュ部のテーブルは JSON オブジェクトに、両者が混じったテーブルは数値キーを文字列化した JSON オブジェクトになります。これは Lua 5.4 リファレンスマニュアルの記述と一致し、主要な JSON ライブラリの挙動とも一致します。
ネストしたテーブルはどこまで深くても OK です。nil は null に、true/false はそのままマップされ、数値は数値のまま(整数は整数のまま)です。シングルクォート、ダブルクォート、長括弧([[...]])で囲んだ文字列も全部正しくパースします。コメント(-- や --[[ ... ]])は取り除かれます。
使い方
3 ステップだけ。小さなテーブルでも、膨大な設定ファイルでも同じ流れです。
Lua を貼り付ける(またはサンプルを試す)
左のエディタに Lua テーブルを貼り付けてください。配列部のテーブル、ハッシュ部のテーブル、ネストしたテーブル、トップレベルの local x = {...} 宣言が複数 — いずれも問題ありません。
Lua の構文はそのままで大丈夫です。クォートなしのキー(name = "...")、角括弧付きのキー(["foo-bar"] = ...)、コメントもすべて正しくパースされます。
「変換」を押す
緑色の 「変換」 ボタンを押してください。テーブルをたどりながら各階層で配列かハッシュかを判定し、対応する JSON を吐き出します。
JSON をコピーする
右側のパネルに整形済み JSON が出ます。設定ファイル、API コール、テストフィクスチャなどにコピーしてください。以上です。
こういう時に本当に役立ちます
ゲーム・エンジンの設定を移行する
多くのエンジン(Love2D、Defold、World of Warcraft のアドオン)は Lua テーブルで設定を持っています。パイプラインを JSON ベースのツーリングに移すとき、一発で変換できます。
OpenResty / Nginx ハンドラのデバッグ
OpenResty スクリプトの中で Lua テーブルとしてレスポンスボディを組み立てた — ここに貼って、再デプロイ前にクライアントが受け取る JSON を確認できます。
Redis の Lua スクリプト
Redis の EVAL スクリプトが複雑な構造を返す、という状況で、Lua テーブルリテラルはログから取り出しやすい形です。JSON に変換してアプリ側の見え方と突き合わせられます。
別言語への設定の移植
Lua スクリプトのツールから Node や Go への書き直しに移るとき、古い設定テーブルを JSON に変換しておけば移行フォーマットとして使えます。
よくある質問
配列かオブジェクトかはどう判定しますか?
json.lua と同じルールです。テーブルのキーが 1 から始まる連続した整数だけなら配列、そうでなければオブジェクトです。混在テーブル(1, 2, "name")は数値キーを文字列化したオブジェクトになります。JSON の配列に名前付きキーは持てないからです。
テーブルの中の nil はどうなりますか?
Lua では nil を代入するとそのキーは削除されます — コンバーターも同じルールで、出力からは nil 値のキーを単に省きます。トップレベルの単独の nil(例: local x = nil)は JSON の null になります。
<code>[[...]]</code> のような長括弧文字列に対応していますか?
はい。長括弧文字列([==[...]==] のようにイコールの数が任意のものも含めて)を正しくパースし、エスケープ付きの JSON 文字列として出力します。
複数のテーブルを貼り付けても大丈夫ですか?
はい。トップレベルの local name = {...} や name = {...} は、それぞれ出力 JSON のキーになります。名前のない末尾のテーブルには数値キーが割り当てられます。黙って捨てられるものはありません。
コードは保存されますか?
いいえ — 変換のためにバックエンドに送るだけで、保存はしていません。とはいえ、貼り付ける前に機密情報は伏せておくのが無難です。
LuaRocks の rockspec ファイルも扱えますか?
はい。rockspec ファイルは実体としては Lua テーブルなので、そのままきれいに変換できます — 依存関係のメタデータを JSON レジストリ形式に移行するのに便利です。
合わせて使いたいツール
Lua → JSON は、他のツールと組み合わせるとさらに便利です: