使用Liquid模板语言合并对象数组时XML转JSON遇字段为空问题
问题分析与解决方案
你的核心问题是遍历的目标节点错误,导致循环从未执行,最终生成空字符串。
问题根源
XML中<cc-emails type="array">是数组的容器节点,真正的邮箱列表是它的直接子节点<cc-email>的集合,路径应为ticket.cc-email.cc-emails.cc-email;同理,fwd-email的集合路径是ticket.cc-email.fwd-emails.fwd-email。你之前遍历的是容器节点ticket.cc-email.cc-emails,而非实际的数组元素集合,所以循环不会触发,列表始终为空。
修正后的Liquid模板
方案一:简化写法(推荐)
直接利用Liquid的join过滤器处理数组节点集合,无需手动循环:
{ "account-id":"{{ ticket.account-id }}", "cc-email":"{{ ticket.cc-email.cc-emails.cc-email | join: ',' }}", "fwd-email":"{{ ticket.cc-email.fwd-emails.fwd-email | join: ',' }}" }
方案二:显式循环写法
如果需要更灵活的处理逻辑,可保留循环但修正遍历路径:
{ "account-id":"{{ ticket.account-id }}", {% assign cc_list = '' | split: ',' %} {% for email in ticket.cc-email.cc-emails.cc-email %} {% assign cc_list = cc_list | push: email %} {% endfor %} "cc-email":"{{ cc_list | join: ',' }}", {% assign fwd_list = '' | split: ',' %} {% for email in ticket.cc-email.fwd-emails.fwd-email %} {% assign fwd_list = fwd_list | push: email %} {% endfor %} "fwd-email":"{{ fwd_list | join: ',' }}" }
验证说明
修正后,模板会正确遍历所有<cc-email>和<fwd-email>节点,将它们的文本内容拼接为逗号分隔的字符串,与你期望的JSON输出一致。
内容的提问来源于stack exchange,提问作者djbokka
相关产品推荐
相关产品推荐

