java - 将 YAML 解析为 JSON 后保留行号

标签 java gson snakeyaml

我收到一个 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/

相关文章:

java - 如何通过java解析yaml文件(snakeYaml)

java - Gson自定义序列化

android - 直接使用输入流解析json

java - 如何使用 Java 验证 yaml?如果 yaml 中缺少某个键怎么办?

java - 如何将 JavaScript 数组发送到表单标签内的 Servlet?

android - 如何反序列化 JSON 对象但将特定字段保留为字符串而不是嵌套对象?

java - 使用 JGit 推送更改的文件时遇到 TransportException "Nothing to push"

java - 我有一个方法调用 'simpleEditText.getText()' 可能会产生 'java.lang.NullPointerException' 错误并希望将其删除

java - Maven 处理 Nexus 异常

java - 流口水为什么 StatefulKnowledgeSession 有不同的知识库