JSON.parse在双引号字符串上扼流圈

时间:2016-04-21 18:15:48

标签: ruby json

所以我有一个ruby对象:

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'}}"));

但那并没有奏效。我必须遗漏一些非常明显的东西,这应该很简单。

mu太短标记为重复。问题是相同的(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}");

1 个答案:

答案 0 :(得分:0)

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}