2015-05-13 60 views
10

基本上试图在YAML东西,可以使用此JSON来完成:在YAML中建立字典项目数组?

{ 
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... 
+1

您是否尝试加载你的JSON代码到一个本地数据结构(在您所选择的语言),然后使用YAML库来序列化该结构?让机器为您做好工作总是更容易。 :) –

回答

36

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

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

你可能一直在寻找YAML太久,因为你叫JSON在您的文章究竟是不是,它更YAML和JSON的一半半。让我们跳过事实,JSON不允许开始用#意见,你应该引用那些密钥字符串,你应该把,元素之间的映射:

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

是正确的JSON以及它是YAML,因为YAML是JSON的超集。 你可以例如请检查在线YAML parser

可以作为YAML使用this online converter其转换为你似乎更喜欢块式的,或者如果你有ruamel.yaml(我增强PyYAML的版本)安装,你可以使用它的命令行工具来转换JSON阻止YAML(以版本0.9.1,你也可以强制流量风格):

yaml json in.json 

它可以帮助您:

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

这真的*是*更好的答案。我有点尴尬让我的接受。 –

+0

谢谢,但看着upvote计数,显然你的答案服务于需求,而我的不需要。 – Anthon

+0

我将它归结为“人们想要什么”与“人们需要”两分法。你在这里提出的观点是重要的 - 如果有人使用JQ等工具生成YAML,然后将它转换为块风格,如果他们更喜欢使用你链接的工具,那么将会有一个更强大的解决方案,尝试手动生成文本以适应示例。 –