Perl から JSON へのコンバーター
Perl のハッシュリファレンスまたは配列リファレンスを貼り付けてください。きれいな JSON が返ってきます。
このツールの役割
深くネストした Perl のハッシュリファレンスを眺めながら、対応する JSON を手書きしようとしたことがあるなら、その辛さをご存じでしょう — => と : の違い、引用符付きのキー、エスケープされた文字列、すべてです。Perl をここに貼り付ければ、何も書き直すことなく有効な JSON が返ってきます。単独の {...} ハッシュリファレンス、my $x = {...}; my $y = [...]; が並んだ宣言の連続、あるいはハッシュリファレンスの中にハッシュリファレンスがあってさらにその中に配列リファレンスがある5層構造でも処理します。
結果は canonical => 1 を指定した JSON::PP や Cpanel::JSON::XS の出力と一致します。ハッシュリファレンスは JSON オブジェクトに、配列リファレンスは配列に、undef は null に、数値は数値のまま、文字列は文字列のままです。"1" と 1 の間にある Perl ドキュメント 由来の曖昧さは、通常どおり解決されます — 数値に見えるものは JSON の数値として出力されます。
bless されたリファレンス(Perl におけるオブジェクト)は、内部のハッシュリファレンスまで展開されるので、bless { ... }, "Order" は同じキーを持つただの JSON オブジェクトとして出てきます。JSON::true、JSON::false、JSON::null の番兵値はそれぞれ JSON の対応する値に変換されます。トップレベルの宣言が複数あれば、変数名をキーにして JSON に並びます。
使い方
3ステップです。小さなハッシュリファレンスを貼り付けても、設定ファイル全体をダンプしても、動作は同じです。
Perl を貼り付ける(またはサンプルを試す)
左側のエディタに Perl をそのまま入れてください。ハッシュリファレンス、配列リファレンス、複数の宣言、bless されたオブジェクト — どれでも大丈夫です。現実的な例を見たい場合は サンプルを読み込む をクリックしてください。
リファレンス構文 はそのまま残してください — \%hash、\@array、{...}、[...]。パーサーはすべて理解します。
「変換」を押す
緑色の 変換 ボタンをクリックします。ツールは Perl 構造をたどってリファレンスを解決し、1パスで JSON を構築します。
JSON をコピーする
右側のパネルにはインデントされた JSON が表示され、API のペイロード、フィクスチャファイル、CPAN モジュールのテストにすぐ使えます。コピーして次に進んでください。
実際に便利な場面
Storable や Data::Dumper からの移行
何年もの Perl ハッシュダンプのレガシーがあり、それを現代的な API に引き渡す必要がある — JSON は共通語です。貼り付けるだけで、エンコーダーを書かずに正しい JSON が得られます。
Perl スクリプトから REST エンドポイントに送る
cron ジョブが DB クエリからハッシュリファレンスを組み立てます。REST API に投げる前にここに貼り付け、JSON の形がサーバーの期待どおりか確認できます。
テストフィクスチャの作成
Perl モジュールのテストから直接ハッシュリファレンスを取り出し、JSON に変換して、言語横断テスト用の .json フィクスチャファイルに落とし込みます。
Perl 以外のチームと設定を共有
Perl の設定ファイルは至るところでハッシュリファレンスを使っています。JSON に変換すれば、Node、Go、Python チームが Perl をインストールせずに読めます。
よくある質問
bless されたオブジェクトは扱えますか?
はい。bless されたハッシュリファレンス(例: bless { id => 1 }, "Order")は内部のハッシュリファレンスとして扱われ、クラス名は捨てられ、キーと値がただの JSON オブジェクトとして出力されます。これは convert_blessed を有効にした JSON::PP の挙動と同じです。
<code>undef</code>、<code>JSON::true</code>、<code>JSON::false</code> はどうなりますか?
undef は JSON の null になります。JSON::true / \1 は true、JSON::false / \0 は false になります。これは Cpanel::JSON::XS の標準的な真偽値の流儀です。
<code>Data::Dumper</code> の出力を貼り付けてもいいですか?
はい — Data::Dumper の出力($VAR1 = {...}; 形式)も問題なくパースできます。先頭の $VAR1 = は変数名として扱われ、外側のキーになります。
数値と文字列の扱いはどうなりますか?
Perl はその区別に大らかです。このコンバーターは一般的なルールに従います: 裸の数値リテラル(42、3.14)は JSON の数値に、引用符で囲まれたもの("42")は JSON の文字列のままです。数値に見える文字列が必要な場合は、引用符で囲んでください。
コードは保存されますか?
あなたのコードは変換のためにバックエンドに送られますが、保存はされません — ペイロードをログにも残しません。ハッシュリファレンスに本物の認証情報が含まれている場合は、貼り付ける前に差し替えてください。
複数のハッシュリファレンスを貼り付けたら?
トップレベルの my $name = {...}; はそれぞれ、変数名をキーにした JSON の要素になります。無名の構造には "_1"、"_2" などが振られます。黙って捨てられるものはありません。
合わせて使えるツール
Perl から JSON は、ツールボックスの他のツールと相性が良いです: