我尝试使用 thymeleaf 构建动态 ld+JSON。在此我使用条件语句,这基本上是有效的。但是,条件语句内的所有变量都不会被解析。
<script type="application/ld+json" >
/*<![CDATA[*/
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Article",
"@id": "https://website.de/quack/[[${quack.id}]]/#article",
"publisher": { "@id": "[[${article.nickname}]]" },
[( ${article.primaryImage} == null ? '' : '"image": { "@id": "https://website.de/quack/${quack.id}/#primaryimage" },
"thumbnailUrl": "${article.primaryImage}",')]
"inLanguage": "[[${quack.language}]]"
}
]
};
/*]]>*/
</script>
结果:
{...
"primaryImageOfPage": { "@id": "https://website.de/quack/${quack.id}/#primaryimage" },
"image": { "@id": "https://website.de/quack/${quack.id}/#primaryimage" },
...}
我错过了什么,将条件语句与语句内的正确解析结合起来?
关键字是字面替换
所以最终对我有用的是使用管道而不是单引号,这可以正确解析所有变量:
[( ${article.primaryImage} == null ? '' : |"image": { "@id": "https://website.de/quack/${quack.id}/#primaryimage" },
"thumbnailUrl": "${article.primaryImage}",| )]