FTL eval_json 失败
FTL eval_json fails
当我尝试在 FTLJSON 下解析
{
"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]
----
希望这些附加信息对我有所帮助。
'....'?eval_json
在 vals
中的结果是 hash,其中包含来自 json 的值。
您不能直接使用 ${...}
计算散列,但您可以单独访问散列中的每个 属性。
例如:
<#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
当我尝试在 FTLJSON 下解析
{
"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]
----
希望这些附加信息对我有所帮助。
'....'?eval_json
在 vals
中的结果是 hash,其中包含来自 json 的值。
您不能直接使用 ${...}
计算散列,但您可以单独访问散列中的每个 属性。
例如:
<#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