【问题标题】:Hierarchical list of name value pairs in YAMLYAML 中名称值对的分层列表
【发布时间】:2020-07-09 22:23:34
【问题描述】:

在 YAML 中表示如下名称值对的分层列表的最佳方式是什么:

name_1: value_1
  subName1_1: subValue1_1 
  subName1_2: subValue1_2 
name_2: value_2
  subName2_1: subValue2_1 
  subName2_2: subValue2_2 
name_3: value_3
  subName3_1: subValue3_1 
  subName3_2: subValue3_2 
name_4: value_4
  subName4_1: subValue4_1 
  subName4_2: subValue4_2 

我正在考虑以下方法,但不确定这是否是最好的方法:

-  name_1:
      ID: 1
      subNames:
         -  subName1_1:
               ID: 1
         -  subName1_2:
               ID: 2
-  name_2:
      ID: 2
      subNames:
         -  subName2_1:
               ID: 1
         -  subName2_2:
               ID: 2

或者我也可以这样做:

-   Name: Name_1
    ID: 1
    SubNames:
      - SubName: subName1_1
        ID: 1
      - SubName: subName1_2
        ID: 2

-   Name: Name_2
    ID: 2
    SubNames:
      - SubName: subName2_1
        ID: 1
      - SubName: subName2_2
        ID: 2

我需要 name_* 以及它们对应的值是唯一的,所以我更喜欢 python 可以轻松使用的东西来验证没有重复。

【问题讨论】:

    标签: yaml pyyaml


    【解决方案1】:

    嗯,有value key 类型。它不是为 YAML 1.1 定义的标准的一部分,但它旨在解决这个问题。它建议您在映射中基本上有一个名为 = 的值,其中包含默认值:

    name_1:
      =: value_1
      subName1_1: subValue1_1 
      subName1_2: subValue1_2 
    name_2:
      =: value_2
      subName2_1: subValue2_1 
      subName2_2: subValue2_2 
    name_3:
      =: value_3
      subName3_1: subValue3_1 
      subName3_2: subValue3_2 
    name_4:
      =: value_4
      subName4_1: subValue4_1 
      subName4_2: subValue4_2
    

    或者,您可以将值设为一个包含单个 key_value 对的列表:

    name_1:
      - value_1
      - subName1_1: subValue1_1 
      - subName1_2: subValue1_2 
    name_2:
      - value_2
      - subName2_1: subValue2_1 
      - subName2_2: subValue2_2 
    name_3:
      - value_3
      - subName3_1: subValue3_1 
      - subName3_2: subValue3_2 
    name_4:
      - value_4
      - subName4_1: subValue4_1 
      - subName4_2: subValue4_2
    

    您可以使用流序列编写此代码,因为 YAML 允许流序列包含单个键值对,这些键值对将被解释为隐式映射:

    name_1: [value_1,
      subName1_1: subValue1_1,
      subName1_2: subValue1_2]
    name_2: [value_2,
      subName2_1: subValue2_1,
      subName2_2: subValue2_2]
    name_3: [value_3,
      subName3_1: subValue3_1,
      subName3_2: subValue3_2]
    name_4: [value_4,
      subName4_1: subValue4_1,
      subName4_2: subValue4_2]
    

    请注意,执行此操作时,子名称中不能有任何类型的块式节点,但其他流节点会很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      相关资源
      最近更新 更多