如何在Liquid模板中正确格式化JSON对象的数组字段?
问题描述
尝试用Liquid模板生成指定JSON结构时,fields数组格式出错:所有元素被直接拼接成单个字符串,没有正确的引号包裹和逗号分隔。
示例输入
{ "queryString": "id:00000000-0000-0000-0000-000000000000", "fields": [ "linkFilename", "documenttype", "description", "webUrl" ] }
期望输出
{ "requests": [ { "entityTypes": [ "listItem" ], "query": { "queryString": "id:00000000-0000-0000-0000-000000000000" }, "region": "EMEA", "fields": [ "linkFilename", "documenttype", "description", "webUrl" ] } ] }
当前使用的Liquid模板
{% capture output %} { "requests": [ { "entityTypes": ["listItem"], "query": { "queryString": "{{ queryString }}" }, "region": "EMEA", "fields": ["{{ fields }}"] } ] } {% endcapture %} {{ output }}
当前错误输出
{ "requests": [ { "entityTypes": [ "listItem" ], "query": { "queryString": "id:00000000-0000-0000-0000-000000000000" }, "region": "EMEA", "fields": [ "linkFilenamedocumenttypedescriptionwebUrl" ] } ] }
请问如何在Liquid模板中为fields数组的元素添加正确的逗号分隔?
解决方案
问题根源是直接将fields数组变量插入字符串时,Liquid会自动拼接数组所有元素,不会处理格式。需要用循环遍历数组元素,逐个输出带引号的内容并控制逗号分隔:
修改后的Liquid模板:
{% capture output %} { "requests": [ { "entityTypes": ["listItem"], "query": { "queryString": "{{ queryString }}" }, "region": "EMEA", "fields": [ {% for field in fields %} "{{ field }}"{% unless forloop.last %},{% endunless %} {% endfor %} ] } ] } {% endcapture %} {{ output }}
核心逻辑说明
- 用
{% for field in fields %}遍历fields数组的每一个元素 - 每个元素输出为带双引号的格式:
"{{ field }}" - 通过
{% unless forloop.last %},{% endunless %}判断是否为最后一个元素,仅给非末尾元素添加逗号,避免数组结尾出现多余逗号
通过以上修改,即可生成格式完全符合预期的JSON结构。
内容的提问来源于stack exchange,提问作者cb0008
相关产品推荐
相关产品推荐

