Say I have a JSON object with some properties in a nested object.
{
"title": "My Blog Post",
"meta": {
"publishedAt": "2016-08-01T00:00:00Z"
}
}
Is there an easy way I can just add a @context to my top-level object to reach
these properties (i.e. just "pass through" the meta object)? Something along
these lines:
{
"@context": {
"title": "schema:name",
"meta.publishedAt": {
"@type": "xsd:date",
"@id": "schema:datePublished"
}
},
"@id": "/my-article",
"title": "My Blog Post",
"meta": {
"publishedAt": "2016-08-01T00:00:00Z"
}
}
I would like to avoid having to add (duplicate) @id to the nested object, which is how I would otherwise have solved it:
{
"@context": {
"title": "schema:name",
"meta": { "@id": "_:meta", "@container": "@set" },
"publishedAt": {
"@type": "xsd:date",
"@id": "schema:datePublished"
}
},
"@id": "/my-article",
"title": "My Blog Post",
"meta": {
"@id": "/my-article",
"publishedAt": "2016-08-01T00:00:00Z"
}
}
This solution works, but requires duplication, and comes from ethanresnick's
comments on Github about annotating JSON API. He noted in another issue that @context is not "quite expressive enough to annotate the JSON API structure". I was hoping to prove him wrong at least with regards to this issue.
I just discovered that the latest JSON-LD spec includes a new section on nested properties. Defining your context like this should result in the desired output:
{
"@context": {
"title": "schema:name",
"meta": "@nest",
"publishedAt": {
"@type": "xsd:date",
"@id": "schema:datePublished",
"@nest": "meta"
}
},
...
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With