json - 如何将第二个项目添加到 JSON 数组中,只有当有一个?
问题描述
我有一些链接数据 JSON,我想知道当且仅当有第二项时如何将第二项添加到数组中。
就我而言,在一篇文章中添加一个或两个共同作者。
script(type="application/ld+json").
{
"@context": "http://schema.org",
"@type": "Article",
"headline": "#{article.title}",
"description": "#{article.description}",
"author": [{
"@type": "Person",
"name": "#{article.author && article.author.name}",
"givenName": "#{article.author && article.author.givenName}",
"additionalName": "#{article.author && article.author.additionalName}",
"familyName": "#{article.author && article.author.familyName}",
"email": "#{article.author && article.author.email}",
"jobTitle": "#{article.author && article.author.jobTitle}",
"workLocation": "#{article.author && article.author.workLocation}",
"worksFor": "Company",
"image": "#{article.author && article.author.image}",
"url": "#{article.author && article.author.url}",
"sameAs": !{JSON.stringify(article.author && article.author.sameAs)}
}],
"datePublished": "#{article.date}",
"dateModified": "#{article.updated || article.date}",
"publisher": {
"@type": "Organization",
"name": "Company",
"logo": {
"@type": "ImageObject",
"url": "...logo-url.jpg"
}
},
"image": "#{article.image}",
"url": "#{article.url}"
}
这里的模板语言是 pug。
那么我将如何添加第二个人?
"sameAs": !{JSON.stringify(article.author && article.author.sameAs)}
}
if (coauthor) return ,{author-2}
],
"datePublished": "#{article.date}",
解决方案
一种(稍微迂回的)方法是预先使用无缓冲代码块在 javascript 中构建模式对象,然后使用JSON.stringify()
.
假设您的数据的结构article.authors
是一组作者:
-
let jsonld = {
'@context': 'http://schema.org',
'@type': 'Article',
'headline': article.title,
'description': article.description,
'datePublished': article.date,
'dateModified': article.updated || article.date,
'publisher': {
'@type': 'Organization',
'name': 'Company',
'logo': {
'@type': 'ImageObject',
'url': '...logo-url.jpg'
}
},
'image': article.image,
'url': article.url
}
for (let i = 0; i < article.authors.length; i++) {
jsonld.authors = jsonld.authors || []
let author = {
'@type': 'Person',
'name': article.authors[i].name,
'givenName': article.authors[i].givenName,
'additionalName': article.authors[i].additionalName,
'familyName': article.authors[i].familyName,
'email': article.authors[i].email,
'jobTitle': article.authors[i].jobTitle,
'workLocation': article.authors[i].workLocation,
'worksFor': 'Company',
'image': article.authors[i].image,
'url': article.authors[i].url,
'sameAs': JSON.stringify(article.authors[i].sameAs
}
jsonld.authors.push(author)
}
script(type="application/ld+json")= JSON.stringify(jsonld, null, 2)
推荐阅读
- android - 如何创建像android toast这样的确认视图
- mysql - 操作不同的表并显示来自一个表的信息
- python - 维度未知时如何创建一维范围张量?
- python-3.x - 了解python中的迭代器和zip
- javascript - 查看如何使用 input type=color 更改颜色
- c# - 按日期过滤时缺少 EFCore 3.1 产品
- birt - BIRT - onCreate 脚本未运行
- c# - 如何在拥有属性的同时从游戏对象获取第一个脚本:Unity
- java - 使用正则表达式匹配可选字符串的 Java 字符串
- java - Java中是否有一个标准的解决方案来设置一次并发值?