パーサーが落とす前に重複したJSONキーを見つける
フォーマットによって重複キーが隠れることがあります。どちらの値を保持するかを選ぶ前に、両方の定義を見つけましょう。
このJSONは目視で確認できるほど小さいように見えます:
{
"theme": "light",
"theme": "dark"
}
しかし、アプリケーションはどのテーマを使うべきでしょうか?オブジェクトを解析して再出力するフォーマッタは、1つの値だけを残し、気づかないうちに競合を隠してしまうかもしれません。
構文が正しくても重複は解決されない
JSON標準では、オブジェクト内の名前は一意であるべきとされています。重複した名前は文法に適合しますが、受信側の扱いは一様ではありません。最後の値を保持するもの、オブジェクトを拒否するもの、両方を公開するものがあります。
JavaScriptはこの例では最後の値を保持します:
JSON.parse('{"theme":"light","theme":"dark"}').theme
// "dark"
これはパーサーの動作であり、2番目の値が正しいという証拠ではありません。設定ファイルでは、最初の値が保持したいものかもしれません。
編集前に両方の定義を見つける
重複キーのサンプルをダウンロードし、CozyToolkitのJSONフォーマッタで開いてください。
- JSONを開くを使用するか、例をあなたのJSONに貼り付けます。
- ハイライトされたフィールドと、エディタの下にある問題リストを確認します。このサンプルでは、3行目3列目の2番目のキーがフラグされます。
- 問題を選択してジャンプします。最初の定義を表示は2行目3列目に移動します。
- 値を信頼できる情報源(設定、APIスキーマ、元のエクスポート)と比較します。変更前にコピーを保持してください。生データをコピーは入力内容をそのまま保存します。
- 意図しないプロパティを削除します。問題が解決されたら、出力を確認し、フォーマット済みをコピーまたはダウンロードを使用します。
フォーマッタは、重複キーが残っている間はフォーマット済み出力を意図的にブロックします。キーの並べ替えやインデントの変更では、曖昧さを解決できません。
この例では、ダークモードが意図した設定だと仮定します。修正済みファイルにはそのプロパティのみが含まれています。私たちが明示的に選択しました。ツールが代わりに決定したわけではありません。
別々のオブジェクト内の同じ名前は問題ない
これらの2つのプロパティは異なるオブジェクトに属しています:
{
"editor": { "theme": "light" },
"preview": { "theme": "dark" }
}
どちらのオブジェクト内にも重複はありません。「theme」という単語をテキスト検索すると2件見つかりますが、それだけで重複キーと診断するには不十分です。別オブジェクトのファイルをフォーマッタで試してください。問題はないはずです。
複数の値が本当に必要な場合は、配列が適切かもしれません。ただし、JSONを受け取るアプリケーションが配列を期待している場合に限ります。エラーを消すためだけにキーをリネームしたり値の型を変更したりすると、そのアプリケーションの契約を壊す可能性があります。
エスケープされた名前も同じ問題を隠す
このオブジェクトには、デコード後に同じキーになる2つの表記があります:
{"theme":"light","\u0074heme":"dark"}
エスケープは文字tを表します。デコード後、両方の名前はthemeになります。私たちのインスペクタもこれをフラグします。エスケープされたキーのサンプルをダウンロードして確認したい場合はどうぞ。
大きなエクスポートでは、繰り返し単語を検索するのではなく、パーサー対応のチェッカーを使用してください。私たちのツールは5 MBまでのファイルをサポートし、200,000値と100レベルのネスト制限があります。100件の問題表示制限に達した場合は、報告された問題を修正して再チェックさせてください。これらの制限を超えるファイルには、重複を明示的に検出して破棄するローカルのストリーミングバリデータを使用してください。
クリーンな結果が示すこと
重複キーエラーがないということは、この特定の曖昧さがなくなったことを意味します。価格、権限、URL、設定値が正しいことを証明するものではありません。これらはスキーマとファイルを使用するアプリケーションに対して確認してください。
2026年10月1日、4つのダウンロード可能なサンプルすべてをツールと同じインスペクタで実行しました。行と列の位置を確認し、重複がフォーマットをブロックすることを検証し、修正済みサンプルと別オブジェクトサンプルが合格することを確認しました。テスト結果には、これらのチェックとJavaScriptの解析結果が含まれています。検査はブラウザ内で行われます。AIモデルがどの値を保持するかを選択することはありません。