本文へ移動
Develop Tools
← 使い方ガイドへ戻る

JSONの重複キーを確認する方法|Treeで値を失わず警告を読む

重複キーは読み込めても、Parserによって最初・最後・全Pairの扱いが異なります。Treeの警告と両方の値を確認し、Producer側で一意に直します。

同じObject内の重複キーをJSON Tree Viewerが警告する図
同じObject内の重複キーをJSON Tree Viewerが警告する図

JSONの構造をツリーで確認する

JSONを貼り付けるかファイルを読み込み、必要な枝だけを展開してキー・値・パスを確認します。

JSON Tree Viewerを開く

結論:警告を確認し、どちらかへ統合して一意にする

Tree Viewerは重複Pairを残して警告するため、上書き前の状態を確認できます。実運用では意味を確認して1つへ統合し、利用先Parserでも検証します。

JavaScriptのJSON.parseなどは一般に後の値を残します。Treeで見えた両方がConsumerでも保持されるとは限りません。

重複キーを含むObject

{"role":"viewer","role":"admin","enabled":true}

roleが同じObject内で2回現れます。Treeでは両Pairと重複警告を確認します。

重複の発生源を切り分ける

手編集、Template展開、Object Merge、複数設定の連結を確認します。

確認点見方判断
位置同じ親Objectか別階層の同名は重複ではない
両方の型と内容統合方針を決める
利用先Parser挙動上書き・拒否を確認

重複キーを調査する手順

  • 1. JSONをTree表示して警告を確認します。
  • 2. 警告されたObjectを開き、同名Pairを確認します。
  • 3. どちらを採用するか仕様と生成元を確認します。
  • 4. 一意へ修正し、Formatterと利用先で再検証します。

Object・Array・値の型をツリーで読む

表示JSON上の意味確認する点
{n}n個のメンバーを持つObjectキー名と親子関係
[n]n個の要素を持つArray0から始まる添字と要素順
string / number文字列または数値引用符の有無と元の数値表記
boolean / nulltrue・falseまたはnull文字列の"true"・"null"と区別

現行ツールはObject、Arrayだけでなく、文字列・数値・真偽値・nullをルートにしたJSONも表示できます。空の{}と[]も有効なJSONとして扱います。

検索・展開・折りたたみを使い分ける

操作現在の対応使いどころ
検索対象すべて・キー・値・パス同名キーや値を候補から絞る
一致方法部分一致・完全一致・大文字小文字の区別既知の名前を正確に探す
候補移動前へ・次へ、祖先と配列範囲を自動展開一致位置を順番に確認する
表示範囲初期深度0~10、すべて展開、すべて折りたたむ必要な枝だけDOMへ描画する

正規表現検索は未対応です。Arrayは100要素ごとの範囲ノードへまとめますが、画面に見える行だけを再利用する仮想スクロールではありません。

JSON Pointerと生成パスを混同しない

表現役割
JSON Pointer/orders/0/idRFC 6901に基づき1つの位置を指す
生成JSONPath$.orders[0].id選択ノードの位置を読みやすく示す
JSONPathクエリ$.orders[?(@.active)]条件に合う複数ノードを検索する式

JSON Tree Viewerは選択ノードのPointerとJSONPath風の位置表現を生成・コピーします。JSONPath式を評価する検索エンジンではないため、FilterやWildcardの動作確認にはJSONPath Testerを使います。

Pointerではキー中の「~」を「~0」、「/」を「~1」へエスケープします。表示された値を手作業で省略せず、そのまま共有してください。

JSON FormatterとTree Viewerの役割を分ける

目的使うツール確認内容
構文エラー位置、インデント、圧縮JSON Formatter(tools/converters/json-formatter.html)テキスト表現を整える
階層、型、親、ノードのPathJSON Tree Viewer構造を折りたたんで追う
データ仕様を作るJSON Schema Generator(tools/generators/json-schema-generator.html)型やrequired候補をSchema化
変更前後を確認するテキスト差分比較(tools/comparators/diff-viewer.html)行・文字単位の変更を比較

整形とツリー表示は競合する機能ではありません。まず厳密JSONとして読める状態を確認し、次にTreeで目的の枝を調べ、必要なら選択ノードだけをコピーします。

大容量JSONと機密情報を安全に扱う

  • ParseはWeb Workerで行い、深い階層は明示的なStackで処理します。検索も一定件数ごとにUIへ制御を戻します。
  • 閉じた枝は子要素をDOMへ描画せず、Arrayは100要素単位でまとめます。ただし全ノードの解析結果はMemoryに保持します。
  • 10MBを超えるファイルでは確認メッセージを出します。固定の完全対応上限ではなく、端末MemoryとBrowserの制約を受けます。
  • 入力JSON、ファイル内容、検索語はServerへ送信・保存しません。localStorageへ保存するのはThemeや文字Sizeなどの表示設定だけです。

認証Tokenや個人情報を含むJSONは、画面共有・Clipboard・Download後のファイルから漏れる可能性があります。共有前にはJSONマスキングツールで値を置換してください。

現在のJSON Tree Viewerでできること・できないこと

項目現在の対応未対応・注意点
入力貼り付け、.jsonファイル、Drag & DropURL取得、Clipboard自動読込はない
JSONObject・Array・Primitive、空構造、重複キー警告JSONL、JSONC、Comment、Trailing Commaは非対応
閲覧初期深度、個別展開、全展開・折りたたみ、100件単位のArray範囲画面行の仮想化と編集はない
検索すべて・キー・値・パス、部分・完全一致、大小文字区別正規表現とJSONPath式評価はない
詳細型、親、深さ、子数、JSON Pointer、生成JSONPathBreadcrumb形式の編集UIはない
出力JSON全体、キー、値、Pointer、Path、選択ノードをCopyし、ノードを保存独立したPretty表示Tabはない

仕様を一次資料で確認する

RFC 8259はJSONの文法、RFC 6901は位置参照、RFC 9535はJSONPathクエリを定義します。ツール固有の表示名と標準仕様を分けて判断してください。

設定Mergeでroleが二重になる例

Base設定と環境設定を文字列連結すると重複が生じます。

ObjectとしてMergeし、意図した上書き規則をTestします。

  1. 両値を確認する
  2. 生成処理を特定する
  3. 修正後に警告が消えることを確認する
  4. 確認結果をPath・型・警告と一緒に記録します。

重複キーをSyntax Errorとして拒否する実装もあります。

よくある質問

重複キーはJSON仕様上必ずエラーですか?
文法上受理される場合がありますが、RFC 8259はObject名を一意にすべきとし、挙動の相互運用性がありません。
Tree Viewerは後の値だけ残しますか?
残しません。Pairを保持して表示し、警告します。