2016-04-29 8 views
1

Когда я загружаю следующий документ с SnakeYAML:SnakeYAML: Можно ли получить имя привязки объекта?

unit: 
    &kg 
    name: Kilogram 

возвращает карту со следующим содержанием:

{unit={name=Kilogram}} 

Ссылающегося с якорями отлично работает в SnakeYAML, но это также можно получить имена привязки из документа?

Фрагмент кода:

String text = "unit:\n &kg\n name: Kilogram\n"; 
System.out.println(new Yaml().load(text)); // -> {unit={name=Kilogram}} 

ответ

1

SnakeYAML изначально основан на PyYAML и этот код на основе решает якоря, сохраняя отображение имен анкерных к объектам, он создает во время синтаксического анализа. Если анализатор позже встречает ссылку, он ищет имя в якорях и знает, чтобы создать ссылку на объект, созданный для привязки.

В PyYAML это сопоставление находится в коде для объекта Composer, атрибут соответствующим образом называется anchors. SnakeYaml это still called the same.

Что вам нужно сделать, это пройти через это сопоставление и сравнить значение с (ссылкой) на ваш объект. Если они совпадают, ключ, принадлежащий этому значению, почти наверняка является именем привязки.


В моем питон пакет ruamel.yaml, который является обновлением PyYAML к YAML 1.2 Я реализовал round_trip режим, сохраняющий между прочим комментариями и анкеров. Во время строительства я помещаю комментарий и привязываю информацию к объекту, который будет создан, что легко сделать в Python, но AFAIK не так просто в Java

Смежные вопросы