ruby-on-rails - 无法在 Rails 3 中将 String 和 Fixnum 转换为 JSON

标签 ruby-on-rails ruby json parsing

    JSON.parse('abc'.to_json) gives this error (in rails):

    JSON::ParserError: 757: unexpected token at '"abc"'
    from /Users/mpapper/.rvm/gems/ruby-1.9.2-p290@dfc-site/gems/json-1.7.4/lib/json/common.rb:155:in `parse'
    from /Users/mpapper/.rvm/gems/ruby-1.9.2-p290@dfc-site/gems/json-1.7.4/lib/json/common.rb:155:in `parse'
    from (irb):20
    from /Users/mpapper/.rvm/gems/ruby-1.9.2-p290@dfc-site/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start'
    from /Users/mpapper/.rvm/gems/ruby-1.9.2-p290@dfc-site/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start'
    from /Users/mpapper/.rvm/gems/ruby-1.9.2-p290@dfc-site/gems/railties-3.1.3/lib/rails/commands.rb:40:in `<top (required)>'
    from script/rails:41:in `require'
    from script/rails:41:in `<main>'

同样失败了:

 JSON.parse(100.to_json)

这也是(错误略有不同):

 JSON.parse(1.to_json)

为什么我不直接将输出的 json 包裹在 {} 中,让它看起来像真正的 json? 因为我正在编写的代码应该能够获取任何对象并将其序列化为 JSON,然后再次将其拉回。

我认为问题来自于:JSON 看起来像是一组编码的键值对,它们都放在 {} 中。但是 rails (3.x) 中的 to_json 方法根本不输出任何 {}。

鉴于此,我真正想要的是一种将任意 ruby​​/rails 对象序列化为字符串并再次序列化的简单方法。许多对象已经有一个 to_json 方法(String、Fixnum、Array、Hash),但 String 和 Fixnum 版本不会生成可以解析的 Json。

最佳答案

JSON RFC , 我们有声明

A JSON text is a serialized object or array.

总结起来差不多。在顶层,您的 JSON 必须是数组或对象之一。

你的代码可以简单地做类似的事情吗:

json = {'myprotocol' => whatever}.to_json
result = JSON.parse(json)['myprotocol']

关于ruby-on-rails - 无法在 Rails 3 中将 String 和 Fixnum 转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12075731/

相关文章:

ruby-on-rails - 从 Rails 原始 SQL 查询中获取数据

ruby - 使用 bundler 安装更新版本的 bundler

json - 如何使用 jq 将多个 json 对象与分隔符逗号连接起来

javascript - 如何使用客户端 JavaScript 制作动态 Web 徽章?

c# - 使用 HttpContent.ReadAsAsync<T> 解析带有一个对象或数组的响应

javascript - Angular Bootstrap 单选按钮不触发功能

ruby-on-rails - 您如何获得 Active Record 中子查询的计数?

ruby-on-rails - 如何在 will_paginate View 助手中指定自定义措辞?

ruby - 在 Ruby 中将对象转换为值的散列

Ruby 获取下载进度