JSONフォーマッタが反応しないときの対処法:無効なJSONエラーの原因と修正方法
JSONをフォーマッタに貼り付けたのに反応しない、または赤いエラーが表示される場合、ほとんどのケースでツールが壊れているのではなく、入力したJSON自体に構文エラーがあります。フォーマッタの処理の流れは、まず解析し、その後整形します。解析の段階は非常に厳格で、1文字でも規格に合わないとドキュメント全体が検証を通過できず、ツールは何も出力しません。したがって、反応がないときは、まずツールを変えるのではなく、JSONの構文を確認すべきです。
なぜフォーマッタが反応しないのか
フォーマッタとバリデータの核心的な仕組みは同じです。テキストを読み取り、JSON規格に従って解析し、合法であることを確認してから整形します。解析が失敗すると、ツールには出力できる内容がなく、反応しないか直接エラーを表示します。
JSONの構文規則はJavaScriptのオブジェクトリテラルよりもはるかに厳格です。JSを書くときに慣れている書き方、たとえば末尾のカンマ、シングルクォート、引用符なしのキーは、JSONではすべて不正です。チャットツール、PDF、ワープロソフトからコピーしたテキストには、目に見えない特殊文字が混入していることもあり、同様に解析失敗の原因になります。
最も一般的なJSON構文エラー
以下のいくつかの問題を理解すれば、壊れたデータの大部分を1分以内に修正できます。
末尾のカンマ
オブジェクトや配列の最後の項目の後にさらにカンマを付けるのは、JavaScriptでは合法ですが、JSONでは不正です。これはフォーマッタが反応しない最も一般的な原因です。
{"name": "Ada", "role": "engineer",} は失敗し、{"name": "Ada", "role": "engineer"} なら通過します。
二重引用符の代わりに単一引用符
JSONでは、すべてのキーとすべての文字列値が二重引用符で囲まれている必要があります。単一引用符は不正です。多くのプログラミング言語が受け入れていてもです。
キーに引用符がない
キーは文字列でなければなりません。{name: "Ada"} は不正で、{"name": "Ada"} が正しいです。
コメント
JSONは // や / / のコメントをサポートしていません。コメント付きの設定ファイルをコピーした場合は、まずコメントを削除してから整形してください。
不可視文字と曲がった引用符
ワープロソフト、チャットツール、PDFから貼り付けたテキストには、曲がった引用符、ノーブレークスペース、バイトオーダーマークが含まれていることがあります。これらの文字は画面上では普通の文字とまったく同じに見えますが、パーサーを直接失敗させます。
- 曲がった引用符:
"や"ではなく、" - ノーブレークスペースであり、通常のスペースではない
- ファイルの先頭にバイトオーダーマークがある
エラーが指す行が完全に正常に見える場合は、不可視文字が原因である可能性を疑ってください。その行を手動で入力し直して、もう一度試してください。
無効なJSONを修正する段階的な方法
以下の手順を順番に実行してください。ほとんどのデータは3番目のステップで修正できます。
- 完全なテキストをフォーマッタに貼り付けます。 先に切り詰めないでください。エラー位置はドキュメント全体に対する相対位置なので、テキストを切り詰めると各行の行番号がずれます。
- エラーメッセージを注意深く読みます。 行番号と文字位置をメモします。ツールが位置を報告しない場合は、報告するものに変えてください。
- エラーのある行を確認し、よくある原因を探します。 末尾のカンマ、単一引用符、引用符なしのキーがないか見てください。
- その行に問題がなさそうなら、その上の行を確認します。 前の行の末尾にカンマが欠けていると、しばしば次の行で報告されます。
- マークされた行を手動で入力し直します。 これにより、コピー&ペーストで持ち込まれた不可視文字を除去できます。
- フォーマットを再実行します。 それでも失敗する場合は、ステップ2から5を繰り返します。修正するたびにエラー位置が後ろに移動し、最終的にドキュメント全体が合法になります。
これらの手順を実行しても失敗する場合、問題は構文ではなくファイルサイズにあるかもしれません。ブラウザツールは通常、数メガバイト程度から遅くなります。ドキュメント全体を一度にメモリに読み込む必要があるためです。非常に大きなファイルには、コマンドラインツールやデスクトップソフトウェアの使用をお勧めします。
フォーマッタとバリデータの違い
フォーマッタは合法なJSONをインデントと改行付きのバージョンに書き換え、読みやすくします。バリデータはJSONが構文的に正しいかどうかだけをチェックし、エラーを報告します。多くのツールは一度に両方を実行します。まず検証し、通過したら整形します。
この順序は重要です。ビルドステップやコードレビューなど、はいかいいえの答えが必要な場合はバリデータを使います。データを人に読ませたい場合はフォーマッタを使います。
実際の使用では、この違いがワークフローを変えることはほとんどありません。JSONが不正なら、どちらのツールも結果を出せず、いずれにせよ構文を修正する必要があります。本当に役立つ問いは、ツールが問題の有無だけでなく、問題の場所を教えてくれるかどうかです。良いエラーメッセージには行番号と文字位置が含まれます。
ブラウザでJSONを整形する
JSONを入力パネルに貼り付けると、ツールがそれを解析し、同じタブ内でインデントされた出力を返します。データはサーバーにアップロードされず、すべて自分のマシン上に留まります。その後、結果をコピーしたり、ファイルとしてダウンロードしたりできます。
何もインストールせずにブラウザでJSONを整形したい場合、答えは「最新のブラウザならどれでもできる」です。解析はJavaScriptによって自分のデバイス上で行われます。これにより、ブラウザツールは内部設定やサンプルデータを扱うのに合理的な選択肢となります。
APIデバッグのためにJSONを整形する
生のAPIレスポンスを直接読むのは非常に苦痛です。ほとんどのサーバーは圧縮されたJSONを返します。1行で、空白がまったくありません。整形すると、この1行がざっと見渡せる構造になります。
APIデバッグのためにJSONを整形するときは、3つのことに注目します。
- ネストの深さ。 ネストが深すぎるオブジェクトは、レスポンス構造が期待と異なることを示すことがよくあります。
- null値。 データを保持すべきフィールドが
nullを返す場合、通常はサーバー側の問題を示します。 - 型の不一致。 数値が文字列として返される場合、たとえば
42ではなく"42"は、下流の比較ロジックを壊します。
整形されたビューは、これら3つを一目で見えるようにします。ブラウザのネットワークパネルと併用してください。レスポンスボディをコピーし、フォーマッタに貼り付け、コードを書く前に構造を理解しましょう。
実用的なアドバイス:デバッガで検査する前にレスポンスを整形してください。圧縮されたデータをステップ実行するのは時間の無駄です。
整形と検証に関する実用的なアドバイス
- JSONをバージョン管理にコミットする前に検証しましょう。そうすれば、末尾のカンマ1つでビルドステップが失敗することはありません。
- 設定を読んだりレビューしたりするときは整形しましょう。インデントがあると階層関係が一目瞭然になります。
- 整形はデータの意味を変えないことを覚えておきましょう。変えるのは空白と改行だけです。整形後に値がおかしく見えるなら、それはデータ自体の問題であり、ツールの問題ではありません。
- あるJSONが合法かどうかをすばやく確認したいだけなら、完全な出力を生成する必要はなく、バリデータで十分です。
よくある質問
なぜ私のJSONフォーマッタは何も表示しないのですか?
解析が失敗し、ツールに出力できる内容がないためです。末尾のカンマ、単一引用符、引用符なしのキー、および他の場所から貼り付けたときに持ち込まれた不可視文字を確認してください。
フォーマッタは無効なJSONを修正できますか?
いいえ。フォーマッタは合法な入力のみを整形します。構文エラーはあなた自身かバリデータが先に修正する必要があります。
なぜエラーが指す行は完全に正常に見えるのですか?
多くの場合、問題は前の行にあります。たとえばカンマの欠落や、その行に不可視文字が隠れているなどです。その行を手動で入力し直すと通常は解決します。
ブラウザツールはどのくらいの大きさのファイルを扱えますか?
統一された上限はありませんが、ドキュメント全体を一度にメモリに読み込む必要があるため、ファイルが大きいほど動作が重くなりやすいです。非常に大きなファイルには、コマンドラインやデスクトップツールの方が安全です。
整形するとデータは変わりますか?
いいえ。整形は空白と改行を調整するだけで、キーや値は変更しません。ただし、数値が文字列として書かれているなどの型エラーを見つけるのには役立ちません。それは自分で確認する必要があります。