YAML Объединить одну последовательность и десериализовать с помощью SnakeYAML JAVA
Я пытаюсь объединить значения последовательности с YAML, чтобы после десериализации с SnakeYAML с JAVA.
Я ожидал этого результата:
{
"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
Любая идея?? Спасибо
2 ответа
Нашел вот это: вопрос Github. Так что ваш сценарий был бы невозможен...
Также посмотрите на этот вопрос, касающийся объединения массивов YAML: Как объединить массивы YAML
Обходной путь - назначить уникальные ключи значениям, например так:
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"
}
}
В YAML нет независимого от языка элемента последовательности, как есть независимый от языка ключ слияния для отображений.
Одна из причин этого заключается в том, что вы все еще можете использовать ключ слияния (<<
) без специального значения, если значение не является отображением.
Конечно, вы можете сделать что-то вроде:
root:
seq1: &seq1
- '001' #first
- '002' #secod
seq2: *seq1
seq3: !CombineSequences &seq3
- *seq1
- ['003'] #third
seq4: *seq3
И есть специальный тип CombineSequences
который объединяет свои элементы в один большой список / массив.