当前位置: 首页 > 知识库问答 >
问题:

将YAML解析为JSON后保留行号

别永年
2023-03-14

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

共有1个答案

堵雅健
2023-03-14

一个明显的非答案是:我不知道您可以在这里使用任何内置机制。因此,您可能必须自己编写代码才能实现这两个目标:

  • 用行号跟踪yaml属性
  • 用行号字段增强相应的Json bean

但老实说,真正的答案(imho):拥有独特的验证代码,可以“直接”处理yaml或Json输入。为了验证而进行的额外转换,我发现这一点非常值得怀疑。

 类似资料:
  • 问题内容: 我正在Go中处理一个json POST,其中包含一个包含64位整数的对象数组。当使用json.Unmarshal时,这些值似乎被转换为float64,并不是很有用。 有什么办法可以在json.Unmarshal的输出中保留原始的int64? 转到上面代码的游乐场 问题答案: 解决方案1 您可以使用Decoder和UseNumber解码您的号码而不会丢失: 该类型的定义如下: 这意味着您

  • 问题内容: 我在MongoDB中的规范化数据模型结构中遇到以下错误: 这是由于以下原因造成的: 具体的部分。我的文档中有一个DBRef对象,因此我可以引用另一个集合中的文档。嵌入式文档结构不是选项。那么我该如何解决呢? 问题答案: 您必须为其导入DBRef编解码器才能进行打印,如果您希望以文档json样式进行打印,则需要编写自己的DBRef编解码器,并将其添加到您给toJson()的编解码器中。

  • 问题内容: 我有一个XML文件,例如 如何将其解析为JSON结构文件? 问题答案: 对于一个简单的解决方案,我建议使用Jackson库,它是一个Java库,用于生成和读取带有XML扩展名的JSON,因为它只需几行简单的代码就可以将任意复杂的XML转换为JSON。 input.xml Java代码: 该演示使用Jackson 1.7.7 (较新的1.7.8也可以使用),Jackson XML Dat

  • 我正在从Go中的YAML输入创建一个文档生成器。它需要指定每个项目/节点是从YAML文件的哪一行生成的。有没有办法在Go中实现? 例如,这是一个YAML文件 我希望看到以下内容 我看到一个类似的问题回答了Python解析YAML,返回行号,但我不知道如何利用https://pkg.go.dev/gopkg.in/yaml.v3

  • 问题内容: 我正在尝试将YAML数据解析为字符串: 由于某种原因,config是一个空结构&{}。 问题答案: 您的结构的字段未导出。导出它们,它将起作用。