2015-05-13 74 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,然後將它轉換爲塊風格,如果他們更喜歡使用你鏈接的工具,那麼將會有一個更強大的解決方案,嘗試手動生成文本以適應示例。 –