Freemarker的解析字符串为JSON(Freemarker parse a String as

2019-07-02 16:42发布

也许这是不可能的,
但我想在freemarker中的地图转换JSON字符串

例如:

<#assign test = "{\"foo\":\"bar\", \"f\":4, \"text\":\"bla bla\"}">

并能够从这个字符串获取文本

Answer 1:

使用?eval 。 它的工作原理,因为JSON地图恰好是有效的FreeMarker表达式(更新:除了null不FreeMarker的2.3.x版本识别)。

<#assign test = "{\"foo\":\"bar\", \"f\":4, \"text\":\"bla bla\"}">
<#assign m = test?eval>

${m.foo}  <#-- prints: bar -->

<#-- Dump the whole map: -->
<#list m?keys as k>
  ${k} => ${m[k]}
</#list>

(顺便说一句,你不必使用\"如果你引用的字符串' ,而不是" 。)



Answer 2:

freemarker.sourceforge.net/docs/pgui_datamodel_method.html

在代码:

// a class to parse Json, just add this method to your rendered template data
// with data.put("JsonParser", new FreemarkerJsonParser()); 
// or in shared variables http://freemarker.sourceforge.net/docs/pgui_config_sharedvariables.html
public class FreemarkerJsonParser implements TemplateMethodModel{
    @Override
    public Object exec(List args) throws TemplateModelException {
        return new Gson().fromJson(s, new TypeToken<Map<String, String>>() {}.getType());((String) args.get(0));
    }
}

模板:

<#assign map = JsonParser("{\"foo\":\"bar\", \"f\":4, \"text\":\"bla bla\"}")>
${map.text}


Answer 3:

听起来像是你需要定义/实现一个模板 ,上面写着JSON。



文章来源: Freemarker parse a String as Json
标签: freemarker