2011-04-04 80 views
0

我有一個json對象,它是從多個數據庫查詢的結果創建的。呈現部分爲json在換行符返回語法錯誤

我想將json移動到一個部分,所以我可以使用多種方法(索引,搜索)相同的json格式。

我有我的成績在_listResults.js.erb,並搬到現在他們進入results.json.erb和_listResults.js.erb我有

 
[ 
<% @results.each_with_index do |result, idx| %> 
<%= render 'results.json.erb', result => result %> 
<% end %> 
] 

我的部分看起來像這樣

 
{"result":<%= result.id %> 
,"title":"<%= result.title %> 
..... 

由於換行,我收到說

 
... syntax error, unexpected ',', expecting keyword_end...);@output_buffer.safe_concat(',"title":');@output_buffer.a... 

雖然我可以把整個的錯誤json輸出成一行,看起來這樣可以解決問題,如果我想稍後改變輸出,那將會很難維持。

什麼是處理這類事情的最好方法。

我在Windows上,如果重要的話(希望它不會)。

感謝

+0

最好的方法是不要手動構建您的JSON並在您的控制器中使用to_json/as_json來返回適當的對象。 – Eric 2011-04-04 20:29:11

回答

0

什麼:

{"result":<%= result.id %>, 
"title":"<%= result.title %>" 
... 

僅供參考,http://www.jsonlint.com/是偉大的網站,在這裏你可以查看你的JSON是否是有效的。

+0

問題是沒有錯誤的JSON,所以jsonlint不會幫助。這隻有一次我把它放入局部。將','添加到上面的行只能解決問題,直到我點擊':',這就是我的評論'我可以把整個json輸出放到一行'的意思。 – pedalpete 2011-04-04 19:13:22

+0

你甚至嘗試過我建議的嗎? – apneadiving 2011-04-04 19:21:49

+0

是的,我曾嘗試過在你提出這個建議之前,如果我按照你的格式,它會在':'處打斷,正如我評論的那樣。如果我將':'移動到同一行,那麼我將達到一切都在一行上的程度。然後它會嵌套在'{'上。我認爲有一個更好的方法來做到這一點。 – pedalpete 2011-04-04 20:07:48

0

問題不在於json,而在於ruby解析器的工作方式,在這種情況下,它需要在同一行上有逗號。

[0, 
2 
] parses 

[0 
,2] doesn't 

您的ERB改變

{ 
    "result": <%= result.id %>, 
    "title": "<%= result.title %>" 
} 
+0

感謝James,不幸的是,這隻有在我爲嵌套對象命中'{'時纔有效。它似乎並不在乎這是否在一條線的末端,或線路的起點或其他地方。 – pedalpete 2011-04-04 19:26:14

+0

嗯我正在做同樣的事情,我唯一的區別是我的局部視圖是.html.erb。它被稱爲_data.html.erb。並從index.html.erb <%= render:partial =>'data'%> – 2011-04-04 19:37:52

0

您的原始文件ERB語法錯誤,result => result應該是:result => result

[ 
<% @results.each_with_index do |result, idx| %> 
<%= render 'results.json.erb', :result => result %> 
<% end %> 
] 
+0

我不這麼認爲。 :result => result返回一個空集。如果我不包含結果=>結果,我會得到一個'未定義的局部變量'錯誤。 – pedalpete 2011-04-04 19:50:23

+0

'result => result'僅僅是無效的,render期望散列選項。使用'result => result'您提供一個具有相同鍵和值的散列,這不是一個有效的選項。 – 2011-04-06 09:30:28