Перейти к содержимому

Конвертировать JSON-LD в плоскую форму — Numio

Уплощает (flattening) документ JSON-LD с помощью jsonld.flatten: каждый узел, включая вложенные, становится записью верхнего уровня в @graph, а вложенные объекты заменяются ссылками {"@id"}. Безымянные узлы получают идентификаторы пустых узлов вида _:b0.

Превратить глубоко вложенный JSON-LD в плоский список узлов, который легко индексировать по @id или загрузить в хранилище.

JSON-LD

Context

Flattened

Когда пригодится

  • Превратить глубоко вложенный JSON-LD в плоский список узлов, который легко индексировать по @id или загрузить в хранилище.
  • Найти вложенные объекты без @id, поскольку они отображаются как пустые узлы _:b.

Как пользоваться

  1. Вставьте документ в редактор JSON-LD.
  2. Поместите в редактор Context контекст для сжатия результата, например {"@context": {"@vocab": "http://schema.org/"}}.
  3. Изучите массив @graph: каждый узел перечислен один раз, отсортирован по @id.

JSON-LD + контекст

// 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; результат сжимается с его помощью.

Идентификаторы пустых узлов (_:b0, _:b1, …) назначаются во время обработки и не являются стабильными.

Работает в браузере с jsonld.js. Удалённые контексты в любом из редакторов загружает ваш браузер. Если загрузка не удалась, страница показывает ошибку с URL контекста.

FAQ

Что происходит с вложенными объектами?

Каждый вложенный объект становится отдельной записью в @graph, а родитель сохраняет только ссылку, например "customer": {"@id": "_:b0"}.

Почему массив из одного элемента показан как объект?

Поскольку результат сжимается, свойство с одним значением (orderedItem выше) записывается без массива.

Сливается ли узел, если он встречается дважды?

Да. Узлы с одинаковым @id сливаются в одну запись со всеми их свойствами.

Спецификации и справка