UTILS.
100% ブラウザ内で完結
{ }

JS オブジェクトから厳密な JSON へ

緩い JavaScript オブジェクトリテラル(クォートなしのキー、シングルクォート、末尾カンマ、コメント)を、eval を使わずに厳密で有効な JSON に修復します。

— ここに結果が表示されます —

このツールについて

JS オブジェクトから厳密な JSON へのツールは、緩い JavaScript または JSON5 スタイルのオブジェクトリテラルを、厳密で有効な JSON に修復します。手書きのトークナイザーの上に構築されており、eval や new Function を決して使わないため、厳格な Content Security Policy の下で安全で、信頼できないテキストを貼り付けても安全です。すべてブラウザ内で実行されます。

実際の JSON が拒否するものを受け付けます。クォートされていない識別子キー、シングルクォートの文字列、] や } の前の末尾カンマ、// 行および /* ブロック */ コメント、16 進数(0xFF)、8 進数や 2 進数リテラル、先頭プラスや先頭ドットの数値(+1、.5)、そして undefined、NaN、Infinity という値です。キーは二重引用符で再クォートされ、文字列は正しく再エスケープされ、コメントと末尾カンマは除去され、数値はプレーンな JSON 数値に正規化されます。undefined の扱い(null に変換するかキーを削除するか)と非有限数値の扱い(null に変換するかエラーを出すか)を選び、その後、値は選んだインデント(2 スペース、4 スペース、タブ、または圧縮)で JSON.stringify によって再シリアライズされます。

入力が解析できない場合、ツールは最初の構文エラーをその行と列とともに報告するため、問題をすばやく見つけられます。これは緩い入力を単に拒否する厳密な JSON フォーマッターを補完します。ここでの目的は、コピーしたコンソール出力、設定スニペット、手編集したオブジェクトを、どんなパーサーでも受け付ける JSON へ救い出すことです。

よくある質問

どんな緩い構文を受け付けますか?
クォートなしのキー、シングルクォートの文字列、末尾カンマ、// および /* */ コメント、16 進/8 進/2 進の数値、先頭プラスや先頭ドットの数値、そして undefined、NaN、Infinity のリテラルです。コピーした JS オブジェクトを JSON として無効にする一般的なものです。
解析に eval を使いますか?
いいえ。手書きのトークナイザーと再帰下降パーサーを使い、eval や new Function は決して使わないため、厳格な Content Security Policy の下で動作し、信頼できない入力に対して安全です。常にデータを生成するだけで、コードを実行することはありません。
undefined、NaN、Infinity はどう扱われますか?
JSON にはそのような値がありません。あなたが選びます。undefined は null になるかキーが削除され、NaN/Infinity は null になるかエラーを出せます。これによりどちらの場合も出力が厳密に有効な JSON に保たれます。
入力が無効な場合はどうなりますか?
パーサーは最初の本物の構文エラーで停止し、それが発生した行と列とともに報告するため、当てずっぽうではなく問題の文字を特定して修正できます。

その他のツール