在 java 中使用嵌套数组反序列化 YAML 文件
Deserialisation of YAML file with nested arrays in java
我正在尝试反序列化 Java 中的 Yaml 文件,但遇到了问题,因为它具有嵌套数组格式,如下例所示。
items.yml
ITEMS:
- item1
- item2
- item3:
- item4
- item5
- item6
我在这里使用 Jackson 对其进行反序列化,它在 item2 之前工作正常,但在反序列化 item3 时抛出以下异常:
com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.ymalParser.io.Item]: can not instantiate from JSON object (need to add/enable type information?)
我是这个反序列化的新手。
谁能帮我解决我在这里缺少的东西。
提前致谢..
您正在创建一个简单类型数组(item1、item2、item6)。但是 item3 是一个复杂类型。
ITEMS:
- item1
- item2
...
可以序列化为List<String>
ITEMS:
- item1
- item2
- item3:
- item4
- item5
- item6
无法序列化为 List<String>
但 Map<String, List<Object>
.
试试这个:
ITEMS:
- item1: []
- item2: []
- item3:
- item4
- item5
- item6: []
第二次编辑:
public void test() {
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
Resource resource = new ClassPathResource("test.yaml");
InputStream input = resource.getInputStream();
Map<String, List<Object>> list = mapper.readValue(input, new TypeReference<Map<String, List<Object>>>() {});
mapper.writeValue(System.out, list);
}
输出:
---
ITEMS:
- "item1"
- "item2"
- item3:
- "item4"
- "item5"
- "item6"
我不会提供答案,只是一个小提示:看看你的数据在转换为 JSON:
时的样子
{
"ITEMS": [
"item1",
"item2",
{
"item3": [
"item4",
"item5"
]
},
"item6"
]
}
问题是ITEMS
数组的元素类型不同:item1、item2、item6是字符串,第三项是对象。理论上它是有效的 YAML/JSON,但将它反序列化为 java 对象是有问题的。
我正在尝试反序列化 Java 中的 Yaml 文件,但遇到了问题,因为它具有嵌套数组格式,如下例所示。
items.yml
ITEMS:
- item1
- item2
- item3:
- item4
- item5
- item6
我在这里使用 Jackson 对其进行反序列化,它在 item2 之前工作正常,但在反序列化 item3 时抛出以下异常:
com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.ymalParser.io.Item]: can not instantiate from JSON object (need to add/enable type information?)
我是这个反序列化的新手。 谁能帮我解决我在这里缺少的东西。
提前致谢..
您正在创建一个简单类型数组(item1、item2、item6)。但是 item3 是一个复杂类型。
ITEMS:
- item1
- item2
...
可以序列化为List<String>
ITEMS:
- item1
- item2
- item3:
- item4
- item5
- item6
无法序列化为 List<String>
但 Map<String, List<Object>
.
试试这个:
ITEMS:
- item1: []
- item2: []
- item3:
- item4
- item5
- item6: []
第二次编辑:
public void test() {
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
Resource resource = new ClassPathResource("test.yaml");
InputStream input = resource.getInputStream();
Map<String, List<Object>> list = mapper.readValue(input, new TypeReference<Map<String, List<Object>>>() {});
mapper.writeValue(System.out, list);
}
输出:
---
ITEMS:
- "item1"
- "item2"
- item3:
- "item4"
- "item5"
- "item6"
我不会提供答案,只是一个小提示:看看你的数据在转换为 JSON:
时的样子{
"ITEMS": [
"item1",
"item2",
{
"item3": [
"item4",
"item5"
]
},
"item6"
]
}
问题是ITEMS
数组的元素类型不同:item1、item2、item6是字符串,第三项是对象。理论上它是有效的 YAML/JSON,但将它反序列化为 java 对象是有问题的。