JSON.parse扼流圈双引号串

问题描述:

所以我有一个Ruby对象:JSON.parse扼流圈双引号串

PAGE_SIZES = { 
    letter_size:  { width: '51em', height: '51em' }, 
    half_letter_size: { width: '51em', height: '33em' }, 
    custom:   { width: '42em', height: '51em' } 
} 

和getter方法:

def page_sizes 
    PAGE_SIZES.to_json 
end 

,并在页面对应的JS功能:

var pageSizes = JSON.parse("#{@bulletin_setting.page_sizes}"); 

但该字符串与未转义引号一起发送:

console.log (JSON.parse("{"letter_size":{"width":"51em","height":"51em"},"half_letter_size":{"width":"51em","height":"33em"},"custom":{"width":"42em","height":"51em"}}")); 

这给了我一个错误:

SyntaxError: missing) after argument list 

我试图gsubing所有的双引号用单引号:

console.log (JSON.parse("{'letter_size':{'width':'51em','height':'51em'},'half_letter_size':{'width':'51em','height':'33em'},'custom':{'width':'42em','height':'51em'}}")); 

,但没有奏效。我必须错过一些非常明显的东西,这应该是简单的。

亩太短,标记为重复。问题是一样的(JS字符串中未转义的双引号),但上下文不同。要使用unescape_javascript方法,您需要在控制器中使用include,因为该方法仅适用于视图。所以我觉得gsub方法是一个更清晰的实现。但那只是我的个人意见。

...这是对我工作:

PAGE_SIZES = { 
    'margin'   => { 'top' => '0.5', 'bottom' => '0.5', 'left' => '0.5', 'right' => '0.5' }, 
    'letter_size'  => { 'width' => '8.5', 'height' => '11' }, 
    'half_letter_size' => { 'width' => '5.5', 'height' => '8.5' }, 
    'custom'   => { 'width' => '7', 'height' => '8.5' }, 
} 


    def page_sizes 
    PAGE_SIZES 
    end 

var pageSizes = $.parseJSON("#{j @bulletin_setting.page_sizes.to_json}"); 
+0

试试我刚刚更新 – sebenalern

+0

嗯...感谢答案,但我不会把它的精确副本... escape_javascript为视图,它需要包括一个方法来使用(尽管它同样的事情)...我使用PAGE_SIZES.to_json.gsub(/ \“/,”\\\“”) –

JSON.parse不接受一个键(和值)被包围单引号。你应该使用双引号。

JSON.parse("{'letter_size':{'width':'51em', 'height': '51em'}}") 
// Uncaught SyntaxError: Unexpected token ' in JSON at position 1(…) 

JSON.parse('{"letter_size":{"width":"51em", "height": "51em"}}'); 
// Object {letter_size: Object}