当我试图在FTL中解析JSON下面的内容时
{
"success":true,
"timestamp":1627886463,
"base":"Data1",
"date":"2021-08-02",
"values":{
"data2":7.5,
"data3":44,
"data4":33
}
}
FTL低于1
<#assign vals = jsonData?eval_json>
它失败了。
有什么建议吗?
按照要求,下面是完整的java代码。
public static void main(String[] args) throws Throwable{
Configuration cfg = new Configuration(new Version("2.3.31"));
StringTemplateLoader stringLoader = new StringTemplateLoader();
cfg.setTemplateLoader(stringLoader);
StringBuilder sb = new StringBuilder();
sb.append("<#assign vals = '{ \"success\":true, \"timestamp\":1627886463, \"base\":\"Data1\", \"date\":\"2021-08-02\", \"values\":{ \"data2\":7.5, \"data3\":44, \"data4\":33 }}'?eval_json>");
sb.append("${vals}");
stringLoader.putTemplate("sample", sb.toString());
Map<String, Object> input = new HashMap<String, Object>();
Template template = cfg.getTemplate("sample");
Writer consoleWriter = new OutputStreamWriter(System.out);
template.process(input, consoleWriter);
}
控制台错误如下
FreeMarker template error (DEBUG mode; use RETHROW in production!):
For "${...}" content: Expected a string or something automatically convertible to string (number, date or boolean), or "template output" , but this has evaluated to an extended_hash (wrapper: f.t.SimpleHash):
==> vals [in template "sample" at line 1, column 175]
----
FTL stack trace ("~" means nesting-related):
- Failed at: ${vals} [in template "sample" at line 1, column 173]
----
希望这些补充信息能对我有所帮助。
发布于 2021-08-04 14:05:21
vals
中的'....'?eval_json
的结果是一个包含来自您的json的值的hash。
您不能使用${...}
直接计算散列,但可以单独访问散列中的每个属性。
例如:
<#assign vals='{ "success":true, "timestamp":1627886463, "base":"Data1", "date":"2021-08-02", "values":{ "data2":7.5, "data3":44, "data4":33 }}'?eval_json>
${vals.base}
${vals.date}
${vals.values.data2}
将输出
Data1
2021-08-02
7.5
https://stackoverflow.com/questions/68646393
复制相似问题