Конвертировать JSON-LD в плоскую форму — Numio
Уплощает (flattening) документ JSON-LD с помощью jsonld.flatten: каждый узел, включая вложенные, становится записью верхнего уровня в @graph, а вложенные объекты заменяются ссылками {"@id"}. Безымянные узлы получают идентификаторы пустых узлов вида _:b0.
Превратить глубоко вложенный JSON-LD в плоский список узлов, который легко индексировать по @id или загрузить в хранилище.
Когда пригодится
- Превратить глубоко вложенный JSON-LD в плоский список узлов, который легко индексировать по @id или загрузить в хранилище.
- Найти вложенные объекты без @id, поскольку они отображаются как пустые узлы _:b.
Как пользоваться
- Вставьте документ в редактор JSON-LD.
- Поместите в редактор Context контекст для сжатия результата, например {"@context": {"@vocab": "http://schema.org/"}}.
- Изучите массив @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 сливаются в одну запись со всеми их свойствами.