Парсер Yaml-cpp неправильно обрабатывает фрагмент ключ: значение

сегодня я обнаружил следующее странное поведение в библиотеке yaml-cpp.

Следующий фрагмент yaml:

- { a: b }

правильно анализируется как элемент ключ: значение с ключом = a и значением = b. Но когда я обновил фрагмент до этого:

- { a:b }

фрагмент оценивается как скалярное значение "a:b".

Это правильное поведение? И есть ли простой способ заставить парсер оценивать этот фрагмент как ключ: значение?

Спасибо!


person Ludek Vodicka    schedule 25.09.2013    source источник


Ответы (1)


Это правильное поведение. Из спецификации YAML:

Обычно YAML требует, чтобы индикатор значения сопоставления «:» отделялся от значения пробелом. Преимущество этого ограничения заключается в том, что внутри простых скаляров можно использовать символ «:», если за ним не следует пробел. Это позволяет использовать URL-адреса и временные метки без кавычек. Это также является потенциальным источником путаницы, поскольку «a:1» — это простой скаляр, а не пара ключ: значение.

...

Чтобы обеспечить совместимость с JSON, если ключ внутри сопоставления потока похож на JSON, YAML позволяет указать следующее значение рядом с «:». Это не вызывает двусмысленности, так как все JSON-подобные ключи окружены индикаторами.

Например, вы можете написать:

- { "a":b }

Однако, как они отмечают, это не очень читабельно; придерживайтесь пробела после двоеточия.

person Jesse Beder    schedule 25.09.2013