2012-03-02 128 views
23

我寫我的桌子的常客。並且其中一個coloums將JSON字符串作爲值。嵌入JSON數據到YAML文件

問題是夾具沒有加載爲失敗:

Fixture::FormatError: a YAML error occurred parsing /home/saurajeet/code/dcbox/test/fixtures/hardware.yml. Please note that YAML must be consistently indented using spaces. Tabs are not allowed. Please have a look at http://www.yaml.org/faq.html 
The exact error was: 
    ArgumentError: syntax error on line 145, col 73: ` portslist: [{"name":"ob1","port_num":0,"port_type":"network"},{"name":"ob2","port_nu'..... 

這個任何解決方案。

+0

你有完全相同的問題文件的貼?你在使用哪種處理器?錯誤報告是你有一個* TAB *字符,所以它是非常具體的問題。 – clarkevans 2012-03-02 14:18:23

回答

28

我相信,考慮到這引號應該做的伎倆:

portslist: '[{"name":"ob1","port_type" ... }]' 
+0

如此明顯..試圖逃避特殊符號... :( – Saurajeet 2012-03-02 14:02:20

+2

這使得值是字符串,所以它不是真正嵌入。如果你想這樣做,我會使用一個塊標量和縮進。 – clarkevans 2012-03-02 14:16:37

+0

字符串是標量類型,但我明白你的意思。 – Thermatix 2014-12-04 16:18:39

21

clarkevans'上公認的答案評論建議JSON的長位一個更好的答案,因爲你可以包裝線。我擡頭一看,他提到了塊標量語法,並想我應該在這裏一個例子:

portslist: > 
    [{"name":"ob1","port_num":0,"port_type":"network"}, 
    {"name":"ob2","port_nu... 
6

如果你有字符串,可以作爲弗拉德Khomich提到使用簡單:

portslist: '[{"name":"ob1","port_num":0,"port_type":"network"},...]' 

如果您正在使用ERB並有一個對象,你可以使用to_json和檢查逃到一個JSON字符串:

portslist: <%= [{name: 'ob1', port_num: 0, port_type: 'network'},...].to_json.inspect %> 

如果你有一個大的JSON規範,可以將其存儲在一個分隔的文件和負載使用Ruby,這樣你就可以保持你的YAML文件清理:

portslist: <%= File.read('/path/to/file.json').inspect %> 
3

對於被完整的緣故:如果你使用ActiveRecord::Store,你可以簡單地使用相同的數據的YAML表示加載數據,甚至如果它是一個JSON店:

one: 
    portslist: 
    - 
     name: 'ob1' 
     port_num: 0 
     port_type: 'network' 
    - 
     name: 'ob2' 
     port_num: 1 
     port_type: 'network' 
0

在我的表,列stripe_connect型JSONB的。在夾具,這是什麼工作。請注意,外部單引號是必要的,但方括號不是。單引號之間的所有內容都是一長串。

stripe_connect:「{ 「範圍」: 「READ_WRITE」, 「livemode」:假 「token_type」: 「承載」, 「的access_token」: 「sk_test_madeupvalue」, 「refresh_token」: 「rt_Ae29madeupvalueyX」, 「stripe_user_id」: 「acct_103yZabcdefg」,「stripe_publishable_key」:「pk_test_0HEOmadeupvalue」}」