Сброс значений с кавычками с SnakeYaml - PullRequest
1 голос
/ 20 марта 2019

Имея простой файл yml test.yml следующим образом

color: 'red'

Я загружаю и выгружаю файл следующим образом

        final DumperOptions yamlOptions = new DumperOptions();
        yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);

        Yaml yaml = new Yaml(yamlOptions);


        Object result = yaml.load(new FileInputStream(new File("test.yml")));

        System.out.println(yaml.dump(result));

Я ожидаю получить

color: 'red'

Однако во время дампа сериализатор пропускает кавычки и печатает

color: red

Как я могу заставить сериализатор также печатать оригинальные кавычки?

1 Ответ

0 голосов
/ 21 марта 2019

Как я могу заставить сериализатор печатать оригинальные цитаты тоже?

Не с высокоуровневым API. Цитирование спецификации :

Скалярный стиль является деталью представления и не должен использоваться для передачи информации о содержимом, за исключением того, что простые скаляры различаются с целью разрешения тегов.

API высокого уровня реализует весь процесс загрузки YAML, предоставляя вам только содержимое файла YAML без какой-либо информации о деталях презентации, как того требует спецификация.

При этом вы можете использовать низкоуровневый API, который сохраняет детали представления:

final Yaml yaml = new Yaml();
final Iterator<Event> events = yaml.parse(new StreamReader(new UnicodeReader(
        new FileInputStream(new File("test.yml"))).iterator();

final DumperOptions yamlOptions = new DumperOptions();
final Emitter emitter = new Emitter(new PrintWriter(System.out), yamlOptions);
while (events.hasNext()) emitter.emit(events.next());

Однако имейте в виду, что даже это не сохранит каждую деталь презентации вашего ввода (например, отступы и комментарии не будут сохранены). SnakeYaml не выполняет циклическое переключение и поэтому не может сохранить точную структуру ввода.

...