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_jsonvals 中的结果是 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