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}");
答
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}
试试我刚刚更新 – sebenalern
嗯...感谢答案,但我不会把它的精确副本... escape_javascript为视图,它需要包括一个方法来使用(尽管它同样的事情)...我使用PAGE_SIZES.to_json.gsub(/ \“/,”\\\“”) –