繁体   English   中英

用Jackson解析yaml文件

[英]Parse yaml file with Jackson

我正在尝试解析一个看起来像这样的yaml文件(它是动态的,所以这只是一个例子):

size: 4533
vehicles:
  '1':
    vecUUID: fa461669-6b88-418d-8e7c-219e784a21fc
    ownerUUID: da36067f-7af8-411b-b820-8e0709b4d64e
    invString: |
      rO0ABXcEAAAACXBwcHBwcHBwcA==
  '2':
    vecUUID: 3c192337-c9dd-45f0-92c0-545d42d5404d
    ownerUUID: da36067f-7af8-411b-b820-8e0709b4d64e
    invString: |
      rO0ABXcEAAAACXBwcHBwcHBwcA==
  '3':
    vecUUID: d5df362b-c4f8-4d82-9e3a-c37fba1162f0
    ownerUUID: fd44ce79-32b5-4080-9953-3d0f4d5399b1
    invString: |
      rO0ABXcEAAAAEnBwcHBwcHBwc3IAGm9yZy5idWtraXQudXRpbC5pby5XcmFwcGVy8lBH7PESbwUC
      AAFMAANtYXB0AA9MamF2YS91dGlsL01hcDt4cHNyADVjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0
      LkltbXV0YWJsZU1hcCRTZXJpYWxpemVkRm9ybQAAAAAAAAAAAgACWwAEa2V5c3QAE1tMamF2YS9s
      YW5nL09iamVjdDtbAAZ2YWx1ZXNxAH4ABHhwdXIAE1tMamF2YS5sYW5nLk9iamVjdDuQzlifEHMp
      bAIAAHhwAAAAA3QAAj09dAAEdHlwZXQABmFtb3VudHVxAH4ABgAAAAN0AB5vcmcuYnVra2l0Lmlu
      dmVudG9yeS5JdGVtU3RhY2t0AAxHTEFTU19CT1RUTEVzcgARamF2YS5sYW5nLkludGVnZXIS4qCk
      94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAADHBwcHBw
      cHBwcA==

我已经创建了3个类,Vehicle,VehicleInfo和MyYamlFile,如下所示。

车辆

public class Vehicle {
  @JsonProperty
  private List<VehicleInfo> info;
  // getter methods ommitted
}

VehicleInfo

public class VehicleInfo {
    @JsonProperty
    private String vecUUID;
    @JsonProperty
    private String ownerUUID;
    @JsonProperty
    private String invString;
    // getter methods ommitted
 }

MyYamlFile

public class MyYamlFile {
    @JsonProperty
    private List<Vehicle> vehicles;
    @JsonProperty
    private int size;
    // getter methods ommitted
}

问题是当我运行它时,如下所示:

public class Fix {
    public static void main(String[] args) {
        MyYamlFile file = readYaml(new File("E:\\dev\\FrihedenBilInventoryFix\\VehicleInventory.yaml"));
        System.out.print("test: " + file.getSize());
    }
    public static MyYamlFile readYaml(final File file) {
        final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); // jackson databind
        try {
            return mapper.readValue(file, MyYamlFile.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

我得到一个错误

com.fasterxml.jackson.databind.exc.MismatchedInputException:无法从[来源:(文件); START_OBJECT令牌中反序列化java.util.ArrayList实例。 行:3,列:3](通过参考链:MyYamlFile [“ vehicles”])

知道为什么吗?

您正在尝试将文件解析为List

根据YAML文档

列表的所有成员都是以“-”(破折号和空格)开头的相同缩进级别的行:

而在您的情况下,所有应为列表成员的项目都具有以下格式'1': :,这是不正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM