扁平化访问:JSON-LD To 扁平化形式 — Numio
使用 jsonld.flatten 扁平化 JSON-LD 文档:包括嵌套节点在内的每个节点都成为 @graph 中的顶层条目,嵌套对象被替换为 {"@id"} 引用。没有名称的节点会得到 _:b0 这样的空白节点 id。
将深度嵌套的 JSON-LD 转为扁平的节点列表,便于按 @id 建索引或载入存储。
适用场景
- 将深度嵌套的 JSON-LD 转为扁平的节点列表,便于按 @id 建索引或载入存储。
- 找出哪些嵌套对象没有 @id,它们会以 _:b 空白节点的形式出现。
使用方法
- 将文档粘贴到 JSON-LD 编辑器。
- 在 Context 编辑器中填入用于压缩结果的 context,例如 {"@context": {"@vocab": "http://schema.org/"}}。
- 查看 @graph 数组,其中每个节点只列出一次,并按 @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;结果会用它进行压缩。
空白节点 id(_:b0、_:b1 等)在处理过程中分配,不是稳定的标识符。
使用 jsonld.js 在浏览器中运行。两个编辑器中的远程 context 都由浏览器获取。下载失败时,页面会显示包含该 context URL 的错误。
FAQ
嵌套对象会怎样?
每个嵌套对象都成为 @graph 中独立的条目,父节点只保留引用,例如 "customer": {"@id": "_:b0"}。
为什么单元素数组显示为对象?
因为结果经过压缩,只有一个值的属性(上例中的 orderedItem)会去掉数组直接写出。
同一个节点出现两次会合并吗?
会。具有相同 @id 的节点会合并为一个条目,包含它们的所有属性。