将 YAML 解析为 JSON 后保留行号



我收到一个YAML文件,我使用snakeyaml引擎(对于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 值?

一个明显的非答案:我不知道您可以在此处使用任何内置机制。因此,您可能必须自己编写代码才能完成这两件事:

  • 跟踪 YAML 属性以及行号
  • 使用行号字段增强相应的 Json bean

但老实说,真正的答案(恕我直言(:具有不同的验证代码,可以"直接"处理 yaml 或 Json 输入。出于验证目的的额外转换,我觉得这是非常值得怀疑的。

最新更新