JSON フラット化・復元

フラット化または復元を選び、対応する入力を貼り付けます。入れ子に戻すときは数値キーと重複するパスに注意してください。

ブラウザ内でローカルに実行
1Source2Transform3Result

JSON inputネスト ↔ パス
JSON 出力

JSON をパスにフラット化して復元する方法

JSON を貼り付け、[フラット化]または[フラット化解除]を選んで[実行]を押します。フラット化は各末端の値を user.profile.roles.0 のようなパスに変え、フラット化解除はパスの平らなオブジェクトから入れ子の文書を組み直します。区切り文字はドットまたはスラッシュで、区切り文字を含むキーはバックスラッシュでエスケープされるため、user.profile.roles.0 と文字どおりのキー「a.b」は区別されたままになります。

処理はすべてページ内の JavaScript で完結し、送信は行われません。結果はコピーするか、kivtools-json-flatten.json / kivtools-json-unflatten.json としてダウンロードできます。

  1. 入力欄に JSON を貼り付けるか、[例を読み込む]でサンプル文書から始めます。
  2. [フラット化]で文書をパスと値の組に、[フラット化解除]でパスから文書を組み直します。
  3. パス区切り文字(ドット (.) またはスラッシュ (/))を選びます。区切り文字を含むキーは自動でエスケープされます。
  4. [実行]を押すと、出力欄に結果とともにパス数・バイト数・最大深度が表示されます。
  5. 結果をコピーまたはダウンロードし、[クリア]でフォームを初期状態に戻します。

読み取りで保持される内容、配列と競合の扱い、書き出しファイルの中身

読み取りで保持される内容

値は型を変えずにコピーされます。文字列は文字列のまま、数値は数値のまま、null は null のままです。JavaScript で危険に見えるキー — __proto__、constructor、prototype — もここでは通常のデータキーです。プロトタイプを持たないオブジェクトを組み立てるため、{"__proto__": 1} をフラット化すると「__proto__」パスが残り、復元すると同じキーに戻ります。

空のオブジェクトと配列は既定で保持されます。[空のオブジェクトと配列を保持]をオフにすると破棄され、破棄したコンテナ数が指標に表示されます({"keep":{},"drop":[],"value":1} なら 2)。

パスが配列に戻る条件

フラット化解除が配列を組み直すのは、ノードが 0…n-1 の連続した数値キーだけを持つ場合です。これは実際の配列をフラット化したときの形です。0 と 2 のような飛び番や、0・1・x が混在するノードはオブジェクトのキーのまま残るため、キーが失われることも null の穴が生まれることもありません。

同じキーを二つの形で要求するパスは、黙って上書きせずに報告されます。平らなオブジェクト {"a":1,"a.b":2} は「パス「a.b」は先のキーと競合しています。」と応答し、以前の出力は消去されるので古い結果を新しい実行結果と取り違えることはありません。

深度・サイズ・書き出し

フラット化は文書を反復処理でたどるため、20,000 段の入れ子でもスタックオーバーフローせず 1 本のパスになります。そのような文書の復元はブラウザーの JSON 書き出し限界に達し、そのときは生のエンジンエラーではなくローカライズされた「入れ子が深すぎる」メッセージを表示します。

JSON の構文エラーは、ローカライズされた前置きの後にエンジンの位置情報(例: line 1 column 9)を残します。これは不正な貼り付けを修正するために必要な情報です。ダウンロード名はモードに応じて kivtools-json-flatten.json または kivtools-json-unflatten.json になります。

最近使ったツール: