JSON の整形と検査
貼り付けると整形します。壊れているときは、何行目のどこがどう悪いのかを出します。
既定では並べ替えません。JSON の決まりの上では順序に意味がありませんが、 設定ファイルなど人が読むものでは、書いた人の意図で並んでいることが多いためです。
- 入れ子の深さ思ったより深いときは、1段見落としています
- 2
- キーの数オブジェクトの項目の合計
- 6
- 配列の要素すべての配列の合計
- 3
よくある質問
JSON に末尾のカンマは書けますか?
書けません。{"a":1,} や [1,2,] は誤りです。JavaScript のオブジェクトや配列では書けるため混同されやすいのですが、JSON の仕様には末尾のカンマがありません。設定ファイルで使われる JSONC や JSON5 は JSON とは別の書式で、そちらでは書けます。
キーを ' で囲んでもよいですか?
いけません。JSON の文字列は必ず " で囲みます。' は使えません。またキーも必ず文字列にする必要があるので、{ name: 1 } ではなく { "name": 1 } と書きます。JavaScript のコードからオブジェクトをそのままコピーすると、この2つでつまずくことが多いです。
同じキーを2回書くとどうなりますか?
多くのソフトは、あとに書いたほうだけを残して前のものを黙って捨てます。{"a":1,"a":2} は {"a":2} になります。JSON の仕様はこの場合の動きを定めていないため、エラーにもなりません。気づかないまま値が消えるので、この道具は重複したキーを見つけてお知らせします。
キーを並べ替えても大丈夫ですか?
JSON の仕様の上では、オブジェクトのキーの順序に意味はありません。ただし設定ファイルのように人が読むものでは、書いた人が意図して並べていることが多く、並べ替えると読みにくくなります。この道具が既定で並べ替えないのはそのためです。2つの JSON を見比べたいときだけ、並べ替えを使ってください。
コメントは書けますか?
書けません。JSON にコメントの決まりはなく、// も /* */ も構文エラーになります。考案者のダグラス・クロックフォード氏が、コメントに指示を埋め込む使い方を避けるために外したという経緯が知られています。コメントを書きたい場合は JSONC や YAML など別の書式を使うか、"_comment" のようなキーを1つ設ける方法があります。
貼り付けた内容はどこかに送られますか?
送られません。整形も検査もすべてこの画面の中(お使いの機器の中)で行っています。内容がこの機器から出ることはないので、API の応答や設定ファイルなど、社外に出せないものでもそのまま貼り付けられます。
「何文字目」では探せません
JSON が読めないとき、多くのソフトはこう言います ──Unexpected token } in JSON at position 42。 英語であることより問題なのは、位置が先頭から何文字目で示されることです。
改行を含む長い JSON で「42文字目」と言われても、そこへ辿り着けません。 だからこの道具は、位置を行と列に直し、その行そのものを抜き出して、 問題の桁に印を付けて出します。
位置はブラウザの例外の文言からは取っていません。文言の形はブラウザごとに違い、 同じブラウザでも版によって変わるためです。実際いまの Chrome や Node は 「at position」という形で出さなくなっています。 この道具は JSON を自分で読み直して、つまずいた場所を自分で出しています。
同じキーが2回あると、値が黙って消えます
{"a":1,"a":2} のように同じキーが2回あると、 多くのソフトはあとに書いたほうだけを残します。 結果は {"a":2} で、最初の 1 は消えます。
JSON の仕様はこの場合にどうするかを定めていないため、エラーにもなりません。 設定を書き足していくうちに同じキーを二度書いてしまい、片方だけが効いている状態は実際によく起きます。 この道具は、整形する前に重複を見つけてお知らせします。
JSON に書けないもの
| 書き方 | なぜ書けないか |
|---|---|
| 末尾のカンマ{"a":1,} | JSON の構文に末尾のカンマがありません。JSONC や JSON5 では書けます |
| シングルクォート{'a':1} | 文字列を囲めるのは " だけです |
| 引用符の無いキー{a:1} | キーも文字列なので、必ず " で囲みます |
| コメント// と /* */ | JSON にコメントの決まりはありません |
| NaN・Infinity・undefinedJavaScript の値 | JSON の数はふつうの十進数だけです。null に置き換えてください |
| 先頭の 001 や +1 | 数は 0 か 1〜9 で始まります。符号は − だけで、+ は書けません |