ruby - 如何使用 ActiveSupport 3 (Rails) 解析带有不带引号键的无效 JSON

标签 ruby ruby-on-rails-3 json

我需要在 Ruby 中解析某些无效的 JSON。

类似于:

json_str = '{name:"Javier"}'
ActiveSupport::JSON.decode json_str

如你所见,它是无效的,因为哈希键没有被引用,它应该是

json_str = '{"name":"Javier"}'

但这无法更改,我必须解析未加引号的键。

我可以用 ActiveSupport 2.x 解析它,但 ActiveSupport 3 不允许。它抛出我:

Yajl::ParseError: lexical error: invalid string in json text.
                                      {name:"Javier"}
                     (right here) ------^

顺便说一句,它是一个使用一些 Rails 库的 Ruby 应用程序,但它不是 Rails 应用程序

提前致谢

最佳答案

我会使用正则表达式来修复这个无效的 JSON:

json_str = '{name:"Javier"}'
json_str.gsub!(/(['"])?([a-zA-Z0-9_]+)(['"])?:/, '"\2":')
hash = Yajl::Parser.parse(json_str)

关于ruby - 如何使用 ActiveSupport 3 (Rails) 解析带有不带引号键的无效 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4889511/

相关文章:

ruby - apn_on_rails 多个应用程序出错

css - 多个 CSS 类来设置带有 Rails 和 Twitter bootstrap 的按钮样式

jquery - 使下一个可编辑元素可编辑

ruby-on-rails-3 - IIS 反向代理不发送完整的响应正文

json - 在 Go 中解码 JSON 标记联合

ios - 如何使用json和swift 4.1在Google map 上添加多个标记?

ruby - Ruby 中的 include 和 extend 有什么区别?

ruby-on-rails - 如何强制执行 BigDecimal 的有效位数

ruby - Ruby 中的唯一系统 ID ...?

ruby-on-rails - 在 Rails 3 中翻译 JSON