6

我有以下YAML我想Jackson在 Java 中使用解析器解析的内容。

android:
    "7.0":
        - nexus
        - S8
    "6.0":
        - s7
        - g5
ios:
    "10.0":
        - iphone 7
        - iphone 8

我创建了一个 created ,class它具有gettersetteras Java Objectandroid它工作正常。但是我如何为6.07.0? I'm using杰克逊的解析器做同样的事情

4

2 回答 2

6

不知道杰克逊是否支持;这是一个简单的 SnakeYaml 的解决方案(我永远不会理解为什么人们使用 Jackson 来解析 YAML,而它所做的基本上是带走了它用作后端的 SnakeYaml 可能的详细配置):

class AndroidValues {
     // showing what needs to be done for "7.0". "8.0" works similarly.
     private List<String> v7_0;

     public List<String> getValuesFor7_0() {
         return v7_0;
     }

     public void setValuesFor7_0(List<String> value) {
         v7_0 = value;
     }
}

// ... in your loading code:

Constructor constructor = new Constructor(YourRoot.class);
TypeDescription androidDesc = new TypeDescription(AndroidValues.class);
androidDesc.substituteProperty("7.0", List.class, "getValuesFor7_0", "setValuesFor7_0");
androidDesc.putListPropertyType("7.0", String.class);
constructor.addTypeDescription(androidDesc);
Yaml yaml = new Yaml(constructor);

// and then load the root type with it

注意:代码未经测试。

于 2017-11-28T10:22:03.080 回答
3

我认为您应该尝试 annotation com.fasterxml.jackson.annotation.JsonProperty。我将在下面提供一个简短的示例。

示例 YAML 文件:

---
"42": "some value"

数据传输对象类:

public class Entity {

    @JsonProperty("42")
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

}

解析器:

public class Parser {

    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
        Entity entity = mapper.readValue(new File("src/main/resources/sample.yml"), Entity.class);
        System.out.println(entity.getValue());
    }

}

控制台输出应该是:some value.

PS我使用以下依赖项对其进行了测试:

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.2.3</version>
    </dependency>
于 2017-11-29T19:51:15.823 回答