Синтаксический анализатор шаблонов Freemarker или snakeyaml не печатает строки json должным образом - PullRequest
0 голосов
/ 23 апреля 2019

Мы пытаемся распечатать строку в формате json как значение в файле yaml без кавычек. Мы используем шаблонизатор Freemarker версии 2.3.26 и выводим вывод в файлы yaml с помощью библиотеки org.yaml.snakeyaml.

Мы либо видим 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 голосов
/ 23 апреля 2019

Первый пример печатает {"key": "val"} в любой версии FreeMarker.Поэтому я предполагаю, что вы показываете результат анализа вывода шаблона как YAML.(Хотя https://try.freemarker.apache.org показывает вывод шаблона как есть.) В этом случае, я думаю, это должно быть: setting_a: "${a?js_string}".

Кроме того, <#assign a = "{"key": "val"}"> - это синтаксическая ошибка в FreeMarker, и поэтому выне должен получать никакого вывода.

...