因此,让我们考虑以下从数据库获取的数据:
[
{
"@id": "http://example.com/1",
"http://example.com/label": "Parent",
"http://example.com/status": "Active",
"http://example.com/children": [
{
"@id": "http://example.com/2"
}
]
},
{
"@id": "http://example.com/2",
"http://example.com/label": "Child",
"http://example.com/status": "Active"
}
]
还有框架:
{
"@context": {
"@base": "http://example.com/",
"@vocab": "http://example.com/"
},
"@graph": {
"status":{}
}
}
结果将如下所示:
{
"@context": {
"@base": "http://example.com/",
"@vocab": "http://example.com/"
},
"@graph": [
{
"@id": "1",
"children": {
"@id": "2",
"label": "Child",
"status": "Active"
},
"label": "Parent",
"status": "Active"
},
{
"@id": "2",
"label": "Child",
"status": "Active"
}
]
}
正如您在第一个对象中看到的,在
children
部分中,除了 id 之外,我还获得了一些额外的参数。
有没有办法可以简化
children
列表以仅包含 id:
"children": [
"2"
]
我尝试将其添加到我的框架中:
"children": {
"@id": "http://example.com/children",
"@type": "@id"
}
但是它并没有像我想象的那样工作。
使用框架标志:
"@embed": "@never"
或"@explicit": true
。
{
"@context": {
"@base": "http://example.com/",
"@vocab": "http://example.com/"
},
"@graph": {
"status": {},
"@embed": "@never"
}
}
或
{
"@context": {
"@base": "http://example.com/",
"@vocab": "http://example.com/"
},
"@graph": {
"status": {},
"children": {"@explicit": true, "@omitDefault": true}
}
}
但也许您需要的只是压缩。
如果您不想压缩数组,请切换相应的选项。在 JSONLD-Java 中:
final JsonLdOptions options = new JsonLdOptions();
options.setCompactArrays(false);
有了这个框架
{
"@context": {
"@base": "http://example.com/",
"@vocab": "http://example.com/",
"children": {"@type": "@id"}
},
"@graph": {
"status":{},
"children": {
"@embed": "@never"
}
}
}
这就是结果
{
"@context": {
"@base": "http://example.com/",
"@vocab": "http://example.com/",
"children": {
"@type": "@id"
}
},
"@graph": [
{
"@id": "1",
"children": "2",
"label": "Parent",
"status": "Active"
},
{
"@id": "2",
"children": null,
"label": "Child",
"status": "Active"
}
]
}