2015-05-22 56 views
0

當我嘗試將一個ruby字符串解析爲JSON時,self.id引發了有關無效令牌的錯誤。如何JSON解析具有插值的ruby字符串?

JSON.parse "{ 'description' => 'client #{self.id} has been deleted.' }" 

我試着用單引號圍繞對象,但是這樣會導致沒有插值。如何獲得插值和成功的JSON解析?

回答

2

這裏的問題是,即使沒有內插值,你的字符串也是無效的JSON。

"{ 'description' => 'client has been deleted.' }" 

以下是有效的JSON:

'{ "description": "client has been deleted." }' 

注意圍繞重點和價值的雙引號,以及哈希火箭=>結腸:反而是紅寶石具體。

也許你正試圖將Ruby哈希轉換爲json?

require 'json' 
id = 5 
x = { 'description' => "client #{id} has been deleted." }.to_json 
puts x # '{ "description": "client 5 has been deleted." }' 
+0

我覺得海報不知道他貼是不是真的JSON,或JS。他們顯然有一個紅寶石串,只是試圖評估它。 – gamut

+0

我試圖解析JSON,但是在放棄讓JSON工作之後,我不小心複製並粘貼了ruby哈希。這仍然不適合我。這是我得到的錯誤。 JSON :: ParserError:757:'{「description」:「client#{self.id}中的意外標記一直是#{action_past}。」 ,「new_values」=>「#{changes || {}}」}' – ChrisPalmer

+0

''{「description」:「client#{self.id} has#{action_past}。」 ,「new_values」=>「#{changes || {}}」}''這仍然是無效的JSON。那裏有散列火箭而不是冒號。 –

1

好像你只是試圖從一個字符串運行一些紅寶石。因此,假設self.id爲1:

eval "{ 'description' => 'client #{self.id} has been deleted.' }" 

會產生:

=> {"description"=>"client 1 has been deleted."} 
+0

使用「eval」不是有點危險嗎? –

+0

也許,但OPs問題與包含(有效)代碼塊的字符串有關。我看不到任何解析方式,不包括某種eval - 他們想要編寫某種定製解析器。 – gamut