Jekyll中jsonify过滤器异常导致JSON-LD关联链接格式错误
问题原因
- 你使用的
jsonify过滤器仅会对传入的单个URL字符串做JSON转义处理,本身不负责处理数组元素的逗号分隔逻辑 - 原有代码的
forloop.last判断的是当前分类下所有文章循环的末尾,而非符合「排除当前页面」条件的元素末尾,分隔符逻辑完全未生效 - 如果当前页面属于多个分类,还会出现重复链接输出的问题
修复方案
推荐使用先收集符合条件的链接、再整体调用jsonify的方案,完全避免手动拼接JSON的格式错误:
{% assign related_links = "" | split: "" %} {% for category in page.categories %} {% for post in site.categories[category] %} {% if post.url != page.url %} {% assign full_url = post.url | relative_url | prepend: site.url | replace:" ", "," %} {% unless related_links contains full_url %} {% assign related_links = related_links | push: full_url %} {% endunless %} {% endif %} {% endfor %} {% endfor %} "relatedLink": {{ related_links | jsonify }},
如果要保留手动拼接的写法,修正后的代码如下:
{% capture results %}[ {% assign valid_posts = "" | split: "" %} {% for category in page.categories %} {% for post in site.categories[category] %} {% if post.url != page.url %} {% assign full_url = post.url | relative_url | prepend: site.url | replace:" ", "," %} {% unless valid_posts contains full_url %} {% assign valid_posts = valid_posts | push: full_url %} {% endunless %} {% endif %} {% endfor %} {% endfor %} {% for link in valid_posts %} {{ link | jsonify }}{% unless forloop.last %},{% endunless %} {% endfor %}]{% endcapture %} "relatedLink": {{ results }},
说明
两种方案都额外加了去重逻辑,避免多分类场景下的重复链接问题。整体调用jsonify的方案更稳妥,Liquid会自动处理所有JSON格式要求,不需要手动处理分隔符、转义等问题。
内容的提问来源于stack exchange,提问作者Denver Prophit Jr.
相关产品推荐
相关产品推荐

