我收到一个 YAML 文件,我使用 Snakeyaml-engine(适用于 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 beans
但老实说,真正的答案(恕我直言):有不同的验证代码,可以“直接”在 yaml 或 Json 输入上工作。我认为出于验证目的而进行的额外转换非常值得怀疑。
关于java - 将 YAML 解析为 JSON 后保留行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56994862/