You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FTL中动态访问对象?含YAML数据模型示例

问题分析与解决方法

你的FTL模板报错主要有两个原因:

  1. 错误使用嵌套变量语法${${user}.name},FreeMarker不支持这种直接通过变量名引用顶层对象的写法
  2. 每个对象的"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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:20:42