【问题标题】:Building an array of dictionary items in YAML?在 YAML 中构建字典项数组?
【发布时间】:2015-07-25 03:01:23
【问题描述】:

基本上尝试在 yaml 中使用这个 json 来完成一些事情:

{
models:
 [
  { 
    model: "a"
    type: "x"
    #bunch of properties...
  },
  {
    model: "b"
    type: "y"
    #bunch of properties...
  }
 ]
}

到目前为止,这就是我所拥有的,它不起作用,因为我正在重复我的 model 键,但是通过保留 model 关键字可以做到这一点的正确方法是什么?

models:
 model:
  type: "x"
  #bunch of properties...
 model:
  type: "y"
  #bunch of properties...

【问题讨论】:

  • 您是否尝试过将 JSON 代码加载到本机数据结构中(使用您选择的语言),然后使用 YAML 库来序列化该结构?让机器为您完成工作总是更容易。 :)

标签: yaml pyyaml


【解决方案1】:

您可能已经研究 YAML 太久了,因为您在帖子中所说的 JSON 不是,它更像是 YAML 和 JSON 的一半。让我们跳过 JSON 不允许以 # 开头的 cmets 的事实,您应该引用作为键的字符串,并且应该在映射中的元素之间放置 ,

{
"models":
 [
  {
    "model": "a",
    "type": "x"
  },
  {
    "model": "b",
    "type": "y"
  }
 ]
}

是正确的 JSON 和 YAML,因为 YAML 是 JSON 的超集。 你可以例如通过YAML parser在线查看。

您可以使用 ruamel.yaml.cmd(基于我的 PyYAML 增强版:pip install ruamel.yaml.cmd)将其转换为您似乎更喜欢的 YAML 块样式。您可以使用其命令行实用程序将 JSON 转换为阻止 YAML(在 0.9.1 版本中您还可以强制流样式):

yaml json in.json

这让你:

models:
- model: a
  type: x
- model: b
  type: y

有一些在线资源可让您执行上述操作,但与任何此类服务一样,请勿将它们用于任何重要的事情(例如信用卡号码和密码列表)。

【讨论】:

  • 这真的更好的答案。我的接受我有点尴尬。
  • 谢谢,但看看赞成票数,显然你的回答有需要,而我的没有。
  • 我将其归结为“人们想要什么”与“人们需要什么”二分法。您在此处提出的要点很重要-使用诸如 JQ 之类的工具生成 YAML,然后如果他们更喜欢使用您链接的工具将其转换为块样式的人将拥有比其他人更强大的解决方案尝试手动生成文本以适应示例。
【解决方案2】:

使用破折号开始一个新的列表元素:

models:
 - model: "a"
   type: "x"
   #bunch of properties...
 - model: "b"
   type: "y"
   #bunch of properties...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2017-08-30
    • 2014-07-26
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多