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

FTL使用?eval_json解析JSON后输出报错,求可行解决方案

问题根因

你使用?eval_json解析JSON的操作本身是正确的,执行后vals变量是FreeMarker的哈希类型(对应Java的Map结构)。报错触发原因是你直接用${vals}输出哈希对象,FreeMarker不支持将哈希对象隐式转换为字符串输出。

解决办法

根据你的使用场景选择对应方案即可:

场景1:需要输出完整JSON字符串

如果你的需求是把解析后的内容重新转为JSON字符串输出,直接使用?json_string内置方法转换即可,修改FTL代码:

<#assign vals = jsonData?eval_json>
${vals?json_string}

对应到你的Java测试代码,只需将拼接输出的部分修改为:

sb.append("${vals?json_string}");

运行后即可正常输出完整JSON内容。

场景2:需要读取JSON中的具体字段值

如果你的需求是获取JSON里的字段值直接使用,用点语法访问对应字段即可,示例:

<#assign vals = jsonData?eval_json>
<!-- 访问一级字段 -->
请求状态:${vals.success}
响应时间:${vals.date}
<!-- 访问嵌套二级字段 -->
data2数值:${vals.values.data2}
data3数值:${vals.values.data3}
注意事项

?eval_json和?json_string是FreeMarker 2.3.23及以上版本支持的内置方法,你使用的2.3.31版本完全兼容,无需额外调整依赖或配置。

内容的提问来源于stack exchange,提问作者Aniruddha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 15:42:03