Сохранить номер строки после синтаксического анализа YAML в JSON

Я получаю файл YAML, который анализирую с помощью движка змеи (для YAML 1.2).

LoadSettings settings = new LoadSettingsBuilder().build();
Load load = new Load(settings);
Map<String, Object> yamlMap = (Map<String, Object>) load.loadFromString(new String(<yaml_contents_as_byte_array>));

Затем я использую GSON для преобразования этого в JsonObject.

Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(gson.toJson(yamlMap)).getAsJsonObject();

Цель состоит в том, чтобы запустить этот YAML, сравнив его с известной моделью данных. Если поля различаются, обязательные поля отсутствуют и т. д. Я должен возвращать ошибку для каждого из них. Цель состоит в том, чтобы найти способ включить номер строки проблемного поля из исходного YAML, но поскольку я выполняю проверки через JSON, я не знаю исходный номер строки, когда сталкиваюсь с ошибкой. Мне любопытно, есть ли какой-нибудь простой способ сохранить номер строки YAML, возможно, путем добавления значения lineNumber/columnNumber в каждое поле, когда оно анализируется и вставляется в карту?


person Russell Quinlan    schedule 11.07.2019    source источник


Ответы (1)


Отдельный ответ: я не знаю ни одного встроенного механизма, который вы могли бы здесь использовать. Таким образом, вам, вероятно, придется написать код самостоятельно, чтобы сделать обе вещи:

  • отслеживать свойства yaml вместе с номерами строк
  • улучшите соответствующие компоненты Json с полями номеров строк

Но, честно говоря, реальный ответ (имхо): иметь отдельный код проверки, который может работать как с вводом yaml, так и с вводом Json «напрямую». Это дополнительное преобразование с целью проверки я считаю весьма сомнительным.

person GhostCat    schedule 11.07.2019