【问题标题】:Converting Java class structure to yml file将 Java 类结构转换为 yml 文件
【发布时间】:2016-01-29 08:07:42
【问题描述】:

我在Java 中有一个复杂的模型类,它具有不同类的属性。我想以 yml 格式获取类的架构,以提高可读性。我能够将类的结构转换为 JSON 文件,但我觉得 yml 不那么混乱且易于准备。

示例 来自

public class Phone {
    public String name;
    public String number;
}

收件人

Phone:
    fields:
      name:
        type: String
      number:
        type: String

【问题讨论】:

  • 你试过yamlbeans吗? sourceforge.net/projects/yamlbeans
  • 是的,我试过了。但它没有 API 来隐藏类。它可以读取对象

标签: java json yaml


【解决方案1】:

Jackson 库提供了从 Java 类生成 JSONSchema 的能力。您应该能够将其序列化为 YAML,尽管我还没有实际测试过这部分。如下所示:

ObjectMapper m = new ObjectMapper();
SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
m.acceptJsonFormatVisitor(m.constructType(Phone.class), visitor);
JsonSchema jsonSchema = visitor.finalSchema();

ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
mapper.writeValue(yamlFile, jsonSchema);

如果你使用枚举,你可能需要这个配置

mapper.configure(SerializationConfig.Feature.WRITE_ENUMS_USING_TO_STRING, true);

Yaml moduleJSON schema module的github页面上的更多详细信息

【讨论】:

  • 我不想转换对象,我需要读取类并获取其架构。这段代码只是打印了类名,没有检测到任何属性
  • 是的,上述方法将序列化一个对象。 Jackson 有一个 JSON 模式生成器。我会修改我的答案
  • 谢谢,是的,它成功了。但这里唯一的哭声是 yml 输出变得像 JSON 一样神秘。转换为 JSON 会放置 ref、urn 属性。这些属性在转换为 yml 文件时会被保留。无论如何接受答案,因为其他人可能会从中受益。如果您有任何想法来获得干净的转换,请更新此答案
【解决方案2】:

你可以试试http://jyaml.sourceforge.net/ 但该项目不再处于活动状态。

【讨论】:

    【解决方案3】:

    另一种方法可能是使用 ASM 库读取类文件。它有一个不错的访问者 API,可以让您相当简单地将字节码转换为 YAML 等其他表示形式(从这里开始:http://asm.ow2.org/asm50/javadoc/user/org/objectweb/asm/ClassVisitor.html)。但这对您的任务来说可能有点过头了。

    【讨论】:

      【解决方案4】:

      从 RAM 到文件

      如果您的用例只是序列化现有对象,而不先读取它们,您可以尝试使用 Jackson 的 this answer 中的方法;它只是将example 对象写入文件。

      // Create an ObjectMapper mapper for YAML
      ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
      
      // Write object as YAML file
      mapper.writeValue(new File("/path/to/yaml/file"), example);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-12
        • 1970-01-01
        • 2012-03-09
        • 1970-01-01
        • 2017-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多