java - 解析 YAML 文件而不事先编写 java 类
问题描述
我想用 Java 编写一个 YAML 解析器,它能够解析不同格式的 YAML 文件。通常,人们会分析 YAML 并编写相应的 java 类,以便通过 Jackson 映射它们。但是,我想要一个可插拔的架构,并考虑一种允许为某些 YAML 模式生成适配器的方法。最佳解决方案是在读取 YAML 时直接生成所需的 java 类。
这有可能吗?
编辑:我重新考虑了我的问题并得出了解决方案,即读取 YAML 文件并将其写入 hashmap 是最合适的解决方法,无需为每种格式编写静态 java 类,我想接受。
Yaml yaml = new Yaml();
InputStream inputStream = this.getClass()
.getClassLoader()
.getResourceAsStream("templates/template.yml");
Map<String, Object> templateMap = yaml.load(inputStream);
解决方案
我想用 Java 编写一个 YAML 解析器,它能够解析不同格式的 YAML 文件。
该解析器与最流行的 Java YAML 解析器(Jackson 使用)SnakeYAML 有何不同?我并不是说不要这样做,但请注意您的问题可能已经解决了。
通常,人们会分析 YAML 并编写相应的 java 类,以便通过 Jackson 映射它们。
那么无论你想写什么都不是解析器。解析器是将原始输入数据转换为抽象语法树的组件。顺便说一下,Jackson 是 YAML 之上的抽象 API(它还提供 JSON 和 XML 支持)。如果要专门处理 YAML,通常最好直接使用 SnakeYAML。
但是,我想要一个可插拔的架构,并考虑一种允许为某些 YAML 模式生成适配器的方法。
看看 SnakeYAML 的 API。它允许您指定某个类作为加载 YAML 文件的目标。此类基本上用作输入的 YAML 模式。这意味着 SnakeYAML 是一个不知道目标模式的解析器,但为用户提供了指定模式的方法。这不正是你想要的吗?
最佳解决方案是在读取 YAML 时直接生成所需的 java 类。
您正在运行时阅读 YAML。类是在编译时用于定义数据布局和类型层次结构、促进类型检查、封装等的工具。通常,在运行时生成类是没有意义的。
总结一下:目前还不清楚你到底想做什么。也许试着用一个例子来描述你想解决的问题。您的问题的基本答案是:是的,当然可以在不知道目标类的情况下编写 YAML 解析器;SnakeYAML 就是证明。
推荐阅读
- reactjs - 通过开发菜单重新加载应用程序时,模式不会被拆除/消失
- ios - iOS Swift Gestures:如何将两个项目与手势联系起来
- r - 如何将着丝粒信息添加到 Gviz IdeogramTrack 对象?
- firebase - 使用秘密环境变量设置 Firebase 函数配置
- c# - 如何在 C# 中更顺畅地移动“精灵”
- python - 通过同一个窗口在python中输入?
- imacros - 无法使用 iMacros 更新 Web 对话框
- javascript - XPath 表达式在求值器中运行良好,但在浏览器中却不行
- python - Python 单元测试模块抛出“ModuleNotFoundError: No module named 'tests.test_file'”
- excel - 如何过滤掉 Excel 2010 中两个日期之间的长期事件?