JSON・XML・YAMLパーサー
JSON・XML・YAMLを貼り付けるかファイルで開くと、文法チェック(誤りは何行目何文字目か)、折りたたみ式のツリー表示、値・キーの検索、パスによる値の検索、整形・圧縮、相互変換ができます。処理はすべてこのブラウザ内で行われ、入力やファイルはサーバーに送信されません。
JSON・XML・YAMLファイルを入力欄にドラッグ&ドロップしてもかまいません。ファイルはこのブラウザ内でのみ読み取ります(UTF-8、最大2MB)。形式は拡張子と内容から判別し、合うタブで開きます。
構造の概要
検索
ツリー
項目をクリックするとパスがここに表示されます
パスで探す
JSONPathの一部に対応しています: $.a.b · $.list[0] · $.list[-1] · $.list[*].name · $..price · $.list[0:2] · $.list[?(@.price < 10)] · $['キー名']
整形・変換
変換ルール: キーは要素名になり、配列は同じ名前の要素の繰り返しになります。「@名前」キーは属性、「#text」キーは要素のテキストになります。要素名に使えない文字は _ に置き換わります。キーが1つだけのオブジェクトはそのキーがルート名になります(それ以外は「ルート名」、空ならroot)。YAMLへはそのまま書き出し、文字列は別の値と誤読されうる場合(true、007 など)だけ引用符を付けます。
JSON・XML・YAMLファイルを入力欄にドラッグ&ドロップしてもかまいません。ファイルはこのブラウザ内でのみ読み取ります(UTF-8、最大2MB)。形式は拡張子と内容から判別し、合うタブで開きます。
構造の概要
検索
ツリー
項目をクリックするとパスがここに表示されます
パスで探す
XPathの一部に対応しています: /root/item · //name · /root/item[2] · //item[@id='a'] · //item[title='x'] · //item/@id · //name/text() · 名前だけ書くとどこからでも探します
整形・変換
変換ルール: 属性は「@名前」キー、属性や子要素と並ぶテキストは「#text」キーになります。同じ名前が繰り返されると配列、内容のない要素はnullです。コメントと処理命令は捨てます。XMLの値には型がないため、既定ではすべて文字列です(JSON・YAMLとも同じ)。
JSON・XML・YAMLファイルを入力欄にドラッグ&ドロップしてもかまいません。ファイルはこのブラウザ内でのみ読み取ります(UTF-8、最大2MB)。形式は拡張子と内容から判別し、合うタブで開きます。
構造の概要
検索
ツリー
項目をクリックするとパスがここに表示されます
パスで探す
YAMLもJSONと同じ構造として読み、JSONPathで探します: $.a.b · $.list[0] · $.list[*].name · $..price · $.list[?(@.price < 10)] · $['キー名']
整形・変換
変換ルール: YAMLはJSONと同じ構造として読むため、JSONへはそのまま変換されます。XMLへはJSON→XMLのルール(キーは要素名、配列は同名の繰り返し、「@名前」は属性、「#text」はテキスト)に従います。コメントは変換で失われます。
知っておくこと
- JSONは厳密に読みます。コメント、末尾のカンマ、シングルクォート、引用符のないキーはエラーとして知らせます。
- 数値は原文のまま保持します。12345678901234567890や1.0も整形・変換で変わりません。
- 同じキーが2回出てもエラーにはしませんが、警告で知らせます(実際のプログラムは最後の値だけを使います)。
- XMLのDOCTYPE内部宣言(ENTITY)は解釈せず拒否します。エンティティ爆弾や外部ファイル読み込みなどの攻撃の入口になるためです。外部DTDを指す宣言は取得せずに読み飛ばします。
- XMLでは < > & " ' と数値参照(A)だけを展開します。それ以外の &名前; はエラーです。
- 入力は2MB、入れ子は200段までです。
- YAMLはよく使う構文に対応しています — マップ・リスト・引用符付きテキスト・| > ブロックスカラー・[ ] { } フロー・コメント。アンカー(&)・エイリアス(*)・タグ(!)・複数ドキュメント(---)・? 複合キー・複数行の引用符付きテキストは未対応で、エラーとして知らせます。エイリアスは内容を指数的に膨らませる攻撃の入口にもなるため展開しません。
- YAMLの値は1.2のルールで読みます。null・true/false・10進数だけが値になり、yes/no・0x1F・日付は文字列のままです。インデントにはスペースのみ使えます(タブはエラー)。
よくある質問
入力したJSON・XMLはサーバーに送信されますか?
いいえ。読み取り・検査・変換はすべてこのブラウザ内で行われ、どこにも送信・保存されません。
「コード整形」や開発者ツールのJSONタブとの違いは?
それらは見やすく書き直すツールで、こちらは構造を読むツールです。ツリー表示、パスによる値の検索、エラー位置、構造の概要、JSON↔XML変換があります。
XMLをJSONに変換すると数値が文字列になります。
XMLの値には型がないため、既定ではすべて文字列です。「数値・true/falseを値に変換」をオンにすると、数値の形をした文字だけが数値になります(007のような先頭0は文字列のままです)。
JSON→XML→JSONで元に戻りますか?
このツールのルール(属性は「@」、テキストは「#text」、繰り返しは配列)の範囲では戻ります。ただし空文字列とnullはどちらも空要素になりnullに戻り、要素名に使えないキーは変更されます。
YAMLのアンカー(&)とエイリアス(*)はなぜ使えないのですか?
エイリアスは同じ内容を何度も参照でき、数段で文書を何十億倍にも膨らませられる(エイリアス爆弾)ため、展開せずエラーとして知らせます。展開済みのテキストを貼り付ければ読み取れます。