在将SnakeYAML与JAVA反序列化之后,我试图将序列值与YAML合并到。
我希望得到这样的结果:
{
"root": {
"seq4": [
"001",
"002",
"003"
],
"seq3": [
"001",
"002",
"003"
],
"seq2": [
"001",
"002"
],
"seq1": [
"001",
"002"
]
}
}
但是对于这个YAML示例,这对我来说是不可能的:
root:
seq1: &seq1
- '001' #first
- '002' #secod
seq2: *seq1
seq3: &seq3
*seq1
- '003' #third
seq4: *seq3
此示例返回消息:
在解析块映射时 在“”的第2行,第3列: seq1:&anch1 ^ 预期的,但发现'' 在“”的第7行第5列中: * anch1 ^
此外,我探查了此YAML定义,但其返回错误为:
root:
seq1: &anch1
- '001' #first
- '002' #secod
seq2: *anch1
seq3: &anch2
<<: *anch1
- '003' #third
seq4: *anch2
有什么主意吗?谢谢
答案 0 :(得分:1)
在YAML中,没有独立于语言的序列元素,就像没有独立于语言的merge key用于映射一样。
其原因之一是,如果该值不是映射,则仍然可以使用没有特殊含义的合并键(<<
)。
您当然可以做类似的事情:
root:
seq1: &seq1
- '001' #first
- '002' #secod
seq2: *seq1
seq3: !CombineSequences &seq3
- *seq1
- ['003'] #third
seq4: *seq3
并具有一种特殊的类型CombineSequences
,它将其元素组合到一个大列表/数组中。
答案 1 :(得分:0)
发现了这个:Github issue。因此,您的方案将是不可能的...
还要查看有关合并YAML数组的问题:How to merge YAML arrays
一种解决方法是为值分配唯一键,如下所示:
root:
seq1: &anch1
1: '001' #first
2: '002' #secod
seq2: *anch1
seq3: &anch2
<<: *anch1
3: '003' #third
seq4: *anch2
这将产生:
"root": {
"seq3": {
"1": "001",
"2": "002",
"3": "003"
},
"seq2": {
"1": "001",
"2": "002"
},
"seq1": {
"1": "001",
"2": "002"
},
"seq4": {
"1": "001",
"2": "002",
"3": "003"
}
}