首页 > 解决方案 > 从框架的 JSON-LD 中删除额外的参数

问题描述

因此,让我们考虑从 db 获取的以下数据:

[
  {
    "@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"
}

但它不像我预期的那样工作。

标签: jsonrdfsemantic-webjson-ld

解决方案


使用框架标志:"@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);

游乐场:1、2、3_ _ _


推荐阅读