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
相关产品推荐
相关产品推荐

