どこで壊れたかを見つける
貼り付けたJSONが通らないと、パーサーが止まった行と桁が表示されます。その位置をそのまま疑うより、ひとつ上の行を先に見てください。カンマの過不足は次のトークンに進んで初めて分かるため、報告される位置は本当の原因の少し後ろになります。
引っかかる原因はだいたい決まっています。
- 末尾のカンマ。 JavaScriptのオブジェクトでは許されますが、JSONではエラーです。
- シングルクォート。
'name'はJSONの文字列ではありません。キーも値もダブルクォートで囲みます。 - コメント。
//や/* */を含む設定ファイルはJSONではなくJSONCです。 - クォートなしのキー。
{name: "値"}はJavaScriptの書き方です。 NaNとInfinity。 数値に見えますがJSONの仕様にはありません。ログからのコピーで紛れ込みます。
圧縮を使う場面
圧縮すると空白がすべて取り除かれ、1行になります。設定値として埋め込むとき、環境変数ひとつに収めるとき、curlのリクエストボディに貼るときはこの形が必要です。ファイルサイズも減りますが、サーバーは応答をgzipで圧縮して送るので、容量そのものが理由になることはあまりありません。
リポジトリに入るファイルならインデントを残してください。圧縮したJSONは1文字の変更でも差分がファイル全体になり、レビューできなくなります。
キーの順序とインデント
整形してもキーの順序は元のままです。仕様上、オブジェクトのキー順に意味はないとされていますが、実際にはほとんどのパーサーが入力順を保つため、このツールも並べ替えません。
インデントはスペース2つが最も一般的で、4つはPython系のツールと一緒に使われます。タブは数バイト節約できますが、エディタの設定で見た目の幅が変わります。共有リポジトリなら、すでに使われている方に合わせます。
トークンや本番データを貼るとき
入力はどこにも送信されません。ブラウザの中で解析して文字列に戻すだけなので、顧客情報を含む応答やアクセストークンを貼っても端末から出ません。仕組みに関係なく社外ツールの利用を禁じている職場もあるので、本番のデータなら先に規定を確認してください。