YAML自定义对象

时间:2016-12-12 13:21:04

标签: java yaml snakeyaml

我有简单的YAML文件:

object:
  a: 1
  b: 2
  c: 3

我可以将此属性读取到自定义对象,该对象包含仅带有1个参数的构造函数。例如

public class CustomObject {
        private String value;

        public CustomObject(String value) {
            ....
        }

        getValue ...
        setValue ...
    }

其中value是属性串联a,b,c和掩码的结果(结果1:2/3)?

1 个答案:

答案 0 :(得分:1)

使用自定义构造函数和表示符可以实现:

class CustomObjectConstructor extends Constructor {
    public CustomObjectConstructor() {
        this.yamlConstructors.put(new Tag("!customObject"), new ConstructCustomObject());
    }

    private class ConstructCustomObject extends AbstractConstruct {
        public Object construct(Node node) {
            final Map<Object, Object> values = constructMapping(node);
            final String a = (String) values.get("a");
            final String b = (String) values.get("b");
            final String c = (String) values.get("c");
            return new CustomObject(a + ":" + b + "/" + c);
        }
    }
}

你可以像这样使用它:

Yaml yaml = new Yaml(new CustomObjectConstructor());
CustomObject myObject =
    (CustomObject) yaml.load("!customObject\na: 1\nb: 2\nc: 3");

当然,这需要改进处理错误情况,但它显示了一般的想法。要将对象转储为映射,您可以在此处定义与代码类似的代表。有关详细信息,请参阅documentation