【问题标题】:YAML Merge single sequence and deserialize with SnakeYAML JAVAYAML 使用 SnakeYAML JAVA 合并单个序列并反序列化
【发布时间】:2018-12-24 22:44:28
【问题描述】:

我正在尝试将序列值与 YAML 合并,以在使用 JAVA 与 SnakeYAML 进行反序列化之后。

我期待这个结果:

{
  "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 ^

example

另外,我探查了这个 YAML 定义,但它的返回错误是:

root: 
  seq1: &anch1
    - '001' #first
    - '002' #secod
  seq2: *anch1
  seq3: &anch2
    <<: *anch1
    - '003' #third
  seq4: *anch2

有什么想法吗??谢谢

【问题讨论】:

    标签: java yaml snakeyaml


    【解决方案1】:

    找到这个: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"
      }
    }
    

    【讨论】:

    • 感谢您的快速回复。但我喜欢合并非复杂类型的数组。
    【解决方案2】:

    在 YAML 中,没有语言独立的序列元素,例如用于映射的语言独立 merge key

    其中一个原因是,如果值不是映射,您仍然可以使用没有特殊含义的合并键 (&lt;&lt;)。

    你当然可以这样做:

    root: 
      seq1: &seq1
        - '001' #first
        - '002' #secod
      seq2: *seq1
      seq3: !CombineSequences &seq3
        - *seq1
        - ['003'] #third
      seq4: *seq3
    

    并且有一个特殊类型CombineSequences,它将其元素组合成一个大列表/数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      相关资源
      最近更新 更多