如何在FTL中动态访问对象?含YAML数据模型示例
问题分析与解决方法
你的FTL模板报错主要有两个原因:
- 错误使用嵌套变量语法
${${user}.name},FreeMarker不支持这种直接通过变量名引用顶层对象的写法 - 每个对象的
"username"和"userage"之间缺少逗号,且循环结束后会多一个多余的逗号
方案一:修正现有模板语法
使用FreeMarker的.dataModel内置对象来通过变量名访问顶层数据,同时处理末尾逗号问题:
修正后的FTL模板:
[ <#list users as user> { "username": "${.dataModel[user].name}", "userage": "${.dataModel[user].age}" }<#if user_has_next>,</#if> </#list> ]
解释:
.dataModel[user]:通过变量user的值("u1"/"u2")获取顶层对应的用户对象<#if user_has_next>,</#if>:仅在不是最后一个元素时添加逗号,避免JSON格式错误
方案二:优化数据模型(更推荐)
原数据模型的结构不够直观,建议把users直接定义为用户对象列表,这样模板写法更简洁:
优化后的YAML数据:
users: - name: "user1" age: 25 - name: "user2" age: 26
对应的FTL模板:
[ <#list users as user> { "username": "${user.name}", "userage": "${user.age}" }<#if user_has_next>,</#if> </#list> ]
两种方案最终都会输出你期望的JSON格式:
[ { "username": "user1", "userage": "25" }, { "username": "user2", "userage": "26" } ]
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

