如何在Twig模板中循环数组对象构建合法JSON?
解决Twig循环生成合法JSON的问题
这问题我之前也碰到过,手动拼接JSON最容易栽在末尾逗号这种细节上,给你两个靠谱的解决办法,优先用第一个,绝对省心:
方法1:用Twig内置的json_encode过滤器(强烈推荐)
手动拼接JSON不仅容易出逗号问题,还会漏掉特殊字符转义(比如URL里的引号、斜杠),而Twig的json_encode过滤器能帮你一键生成完全合规的JSON,根本不用操心语法细节。
示例代码:
{# 先把所有URL收集到一个数组里 #} {% set url_list = [] %} {% for item in objects %} {% set url_list = url_list|merge([item.get_url()]) %} {% endfor %} {# 直接把数组转成合法的JSON对象 #} {{ {'urls': url_list}|json_encode }}
这样生成的JSON会自动处理逗号、引号转义,不管你的URL里有什么特殊字符,都能保证格式正确。
方法2:用loop.last控制末尾逗号(适合特殊场景)
如果你因为某些原因必须手动拼接JSON,可以用Twig循环内置的loop.last变量判断当前是不是最后一个元素,只在非最后一项后面加逗号:
示例代码:
{"urls": [ {% for item in objects %} "/img/example/{{ item.get_url() }}"{% if not loop.last %},{% endif %} {% endfor %} ]}
这里loop.last在循环到最后一个对象时会返回true,这时候就不会输出末尾的逗号,完美避免无效JSON的问题。
提示:除非有特殊需求,否则优先用方法1,
json_encode能帮你规避很多手动拼接容易犯的错误,比如忘记转义特殊字符导致的JSON解析失败。
内容的提问来源于stack exchange,提问作者Donal.Lynch.Msc
相关产品推荐
相关产品推荐

