本文へスキップ

JSON-LDを平坦化形式に変換 — Numio

jsonld.flatten で JSON-LD ドキュメントをフラット化します。ネストしたものも含めすべてのノードが @graph のトップレベルの要素になり、ネストしたオブジェクトは {"@id"} 参照に置き換わります。名前のないノードには _:b0 のような空白ノード ID が付きます。

深くネストした JSON-LD を、@id でインデックス化したりストアに読み込んだりしやすいフラットなノード一覧にする。

JSON-LD

Context

Flattened

こんなときに使えます

  • 深くネストした JSON-LD を、@id でインデックス化したりストアに読み込んだりしやすいフラットなノード一覧にする。
  • _:b の空白ノードとして現れるので、@id のないネストしたオブジェクトを見つけられる。

使い方

  1. ドキュメントを JSON-LD エディターに貼り付けます。
  2. 結果のコンパクト化に使う context を Context エディターに入れます。例:{"@context": {"@vocab": "http://schema.org/"}}。
  3. @graph 配列を確認します。各ノードは 1 回ずつ、@id 順に並びます。

JSON-LD + context

// JSON-LD editor
{
  "@context": {"@vocab": "http://schema.org/"},
  "@id": "http://example.org/order/7",
  "@type": "Order",
  "customer": {"name": "Jane Doe"},
  "orderedItem": [
    {"@id": "http://example.org/product/42", "name": "Lamp"}
  ]
}

// Context editor
{"@context": {"@vocab": "http://schema.org/"}}

フラット化した JSON-LD

{
  "@context": {
    "@vocab": "http://schema.org/"
  },
  "@graph": [
    {
      "@id": "_:b0",
      "name": "Jane Doe"
    },
    {
      "@id": "http://example.org/order/7",
      "@type": "Order",
      "customer": {
        "@id": "_:b0"
      },
      "orderedItem": {
        "@id": "http://example.org/product/42"
      }
    },
    {
      "@id": "http://example.org/product/42",
      "name": "Lamp"
    }
  ]
}

仕様と制限

Context エディターは必須で、有効な JSON が必要です。結果はこの context でコンパクト化されます。

空白ノード ID(_:b0、_:b1 など)は処理中に割り当てられるもので、安定した識別子ではありません。

jsonld.js を使ってブラウザで実行されます。どちらのエディターのリモート context もブラウザが取得します。ダウンロードに失敗すると、その context URL を含むエラーが表示されます。

FAQ

ネストしたオブジェクトはどうなりますか?

ネストした各オブジェクトは @graph の独立した要素になり、親には "customer": {"@id": "_:b0"} のような参照だけが残ります。

要素が 1 つの配列がオブジェクトとして表示されるのはなぜですか?

結果がコンパクト化されているため、値が 1 つのプロパティ(上の orderedItem)は配列なしで書かれます。

同じノードが 2 回現れたらマージされますか?

はい。同じ @id を持つノードは、すべてのプロパティを持つ 1 つの要素にマージされます。

仕様を確認する