Freemarker模板解析器或snakeyaml无法按预期打印json字符串

时间:2019-04-23 18:54:51

标签: json templates yaml freemarker snakeyaml

我们正在尝试打印出json格式的字符串,作为yaml文件中不带引号的值。我们正在使用Freemarker模板引擎2.3.26版,并使用org.yaml.snakeyaml库将输出转储到yaml文件中。

我们要么看到json转换为yaml,要么看到json用单引号引起来;即使https://try.freemarker.apache.org/似乎表明有可能。

以下是一些带有代码片段和相应输出的示例:

<#assign a = '{"key": "val"}'>
setting_a: ${a?string}

打印(不带引号)

string_a:
  key: val


<#assign a = '{"key": "val"}'>
setting_a: ${a?js_string}

打印(带引号和转义符)

setting_a:
  \"key\": \"val\"


<#assign a = "{"key": "val"}">
setting_a: ${a?json_string}

打印(带引号和转义符)

setting_a:
  \"key\": \"val\"


<#assign a = "{\"key\": \"val\"}">
setting_a: ${a?string}

打印(不带引号)

setting_a:
    key: val


<#assign a = "{"key": "val"}">
setting_a: ${a?js_string}

打印(带引号和转义符)

setting_a:
  \"key\": \"val\"


<#assign a = "{"key": "val"}">
setting_a: ${a?json_string}

打印(带引号和转义符

setting_a:
  \"key\": \"val\"

我们期望的是输出yaml文件是

setting_a:{“ key”:“ val”}。

  • 这可能吗?
  • 如果是这样,我们是否需要为此选择特定的org.yaml.snakeyaml.DumperOptions
  • 如果这不可能,我想知道我是否在https://try.freemarker.apache.org/上选择了错误的选项

1 个答案:

答案 0 :(得分:0)

第一个示例在任何版本的FreeMarker中打印{"key": "val"}。所以我想您正在显示将模板的输出解析为YAML的结果。 (虽然https://try.freemarker.apache.org按原样显示模板输出。)在那种情况下,我认为应该是:setting_a: "${a?js_string}"

此外,<#assign a = "{"key": "val"}">是FreeMarker中的语法错误,因此您不应获得任何输出。