2017-06-20 35 views
0

我有一些麻煩逃脫和JSON數組上設置撇號。 我有這樣的:Escape和撇號設置JSON傳遞通過導軌到JS

@option_change = OptionChange.new(@product).to_json.html_safe 

在我使用它在這樣的JS文件:

var json_test = $.parseJSON('<%= @option_change %>'); 

當這個js執行,這是回報:(這是我@option_change的內容)

'"[{"option":1,"properties":[{"sequence":null,"option_value":{"id":3,"value":"Test'WithError","image_uid":null,"image_name":null,"description":""},"product_sku_id":82,"available_stock":true}],"next_option":null}]"' 

我因爲Test'WithError設置的撇號的錯誤,我嘗試使用GSUB。(「「」,「\\」」)像其他職位的建議,但我認爲我的問題需要一個更具體的要解決的方法。

@product:#<Product id: 48, name: "[ADENA][TESTE] 365b4ea2f838", resume: "365b4ea2f838", description: "<p>\r\n\t365b4ea2f838</p>\r\n", created_at: "2017-06-14 21:29:05", updated_at: "2017-06-20 13:10:58", category_id: 1, highlight: 0, highlight_image: nil, category_highlight: false, meta_description_deprecate: nil, meta_keywords_deprecate: nil, seo_title_deprecate: nil, custom_title_deprecate: nil, brand_id: nil, profile_property_id: nil, video_url: "", creditcard_split_config_id: nil, code: nil, product_type_id: 1, unpackable: false, ensemble: false, quantity_uses_decimal: false, minimum_to_buy: #<BigDecimal:7f93ee2f7f90,'0.1E1',9(18)>, delta: true, availability: true, visits: 73, additions: 0, removals: 0, custom_delivery_time_deprecated: nil, sales: nil, google_shopping_identifier_exists: true, private: false, keywords: "", extends_delivery_type: "minute", extends_delivery_time: nil>

你們有什麼想法如何?

謝謝!

+0

嘗試gsub(「'」,「\\\''」) – gaetanoM

+0

嘗試過它,在JSON內部,他認爲撇號作爲JSON文件的結尾而不是字符串的一部分。 –

+0

'@ product'的價值是什麼? –

回答

1

單引號在JSON中沒有特殊含義,所以to_json不會逃脫它們。例如:

> puts "'".to_json 
"'" 

還要注意的是to_json包括字符串外引號這樣的事情是這樣的:

'<%= some_string.to_json %>' 

將包裹雙引號JSON字符串用單引號和你結了混亂,如:

'"{\"k\":\"v\"}"' 
'"{\"k\":\"'\"}"' 
// --------^ broken string due to an un-escaped inner quote 

當你真的想:

"{\"k\":\"v\"}" 
"{\"k\":\"'\"}" 
// -------^ Not broken as there are no outer single quotes to fight with 

在JavaScript中考慮這些結果:

> JSON.parse("{\"k\":\"v\"}") 
< {k: "v"} 

> JSON.parse('"{\"k\":\"v\"}"') 
< SyntaxError: JSON Parse error: Unable to parse JSON string 

第一個是你大概之後在做什麼。

我覺得你只是想刪除額外的引號:

var json_test = $.parseJSON(<%= @option_change %>); 

或者更好(IMO)推編碼到視圖,這樣你的Ruby說:

@option_change = OptionChange.new(@product) 

和你的觀點說: :

var json_test = $.parseJSON(<%= @option_change.to_json.html_safe %>); 

var json_test = $.parseJSON(<%= @option_change.to_json %>); 

取決於上下文。

+0

我瞭解單引號問題,並遵循您的指示,無論如何它打破了。 無論如何這是結果: var json_test = $ .parseJSON([{「option」:1,「properties」:[{「sequence」:null,「option_value」:{「id」:3,「value」 : 「Test'WithError」, 「image_uid」:NULL, 「IMAGE_NAME」:空, 「說明」: 「」}, 「product_sku_id」:82, 「available_stock」:真}], 「next_option」:空}]); ' 謝謝你的努力! –

+0

@FelipePin是否刪除了前面提到的周圍引號?我無法重現該問題[Repl.it示例](https://repl.it/IuLs/1) – engineersmnky

+0

@FelipePin但是它的外部引用具有很高的重現性[Repl.it](https://repl.it/ IuLs/2) – engineersmnky