【问题标题】:Error while parse a json object as ruby object将 json 对象解析为 ruby​​ 对象时出错
【发布时间】:2011-11-30 21:39:14
【问题描述】:

我的问题是下一个:

当我尝试在 RUBY ON RAILS 3 上使用 'json' gem 解析 json 参数时,抛出此错误:

 Unexpected token at 

例子

我在 ruby​​ 中有这个对象:

然后我有这个 html 代码:

<script>
        $("#selected").live('click', function(){
            jQuery.ajax({url: '<%= deselect_all_checkboxes_path %>', data: {contacts: '<%= contacts.to_json %>'}});
        });
</script>

<input type="checkbox" id="selected" value="1" >

我在 Rails 控制台中尝试此代码

JSON.parse(json_string.gsub(/&quot;/, "\"")) 

工作正常。但是,当我尝试此代码时:

JSON.parse(params[:contacts].gsub(/&quot;/, "\"")) 

gsub 方法有问题。在 Rails 控制台中工作正常,但是当我调试时抛出错误消息。问题在于“;”字符。

可能是哪个错误?

【问题讨论】:

  • 是什么产生了 &quot 版本?
  • @jaydel 我正在使用 Rails,所以我在 jQuery 函数中转换为 json。现在我编辑并发布 js 函数。
  • 用 CGI.unescapeHTML 代替 gsub 怎么样?
  • @Nick 是代码大师。非常感谢。
  • @user751132 如果满足您的需求,请接受答案。

标签: jquery ruby-on-rails ruby json


【解决方案1】:

首先对 HTML 进行转义,然后将其解析为直接 JSON:

JSON.parse(CGI.unescapeHTML(params[:contacts]))

【讨论】:

    【解决方案2】:

    您不想在 jQuery 中引用 contacts.to_json 值,当您希望它成为 JavaScript 对象文字时,它会将其转换为字符串;一旦你的数据是一个字符串,它最终会是由 ERB 编码的 HTML,你会得到你所看到的混乱。在你的 jQuery 中试试这个:

    data: {contacts: <%= contacts.to_json.html_safe %>}
    

    这应该会在您的 jQuery 中为您提供一个不错的 JavaScript 对象文字,并且当它被发送回您的服务器时,它将被序列化为 JSON 对象(而不是 JSON 字符串)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-25
      • 2013-03-06
      • 1970-01-01
      • 2023-02-25
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多