【问题标题】:JSON parse in ruby failingruby 中的 JSON 解析失败
【发布时间】:2017-02-08 21:55:56
【问题描述】:

在我的 rails 数据库中,我有一个带有有效 json 文本字段的对象:

"\"AACAY, AAOI, AAON, AATI, ABAX,ZYXI\""

如果我在 ruby​​ 中的字段上调用 ​​JSON.parse,则会出现以下错误:

JSON::ParserError: 784: unexpected token at '"AACAY, AAOI, AAON, AATI, ABAX,ZYXI"'

但是,如果我在浏览器中对同一字符串调用 JSON.parse,它就可以工作。

为什么 ruby​​ 调用失败?

【问题讨论】:

  • JSON.parse 不期望 JSON,而不是 JSON 片段?
  • 我认为你是对的。我错误地认为他们做了类似的事情。
  • 这项工作在我这边找到。您可能想要更新您的 json gem 并在 pry or irb 中试用。我已经尝试过它正确传递的字符串。我正在使用 ruby​​ 2.3.1
  • JSON.parse(string)JSON.load(string) 都适合我

标签: ruby-on-rails json ruby


【解决方案1】:

对于嵌套在 JSON 字符串中的字符串,我遇到了与 JSON.parse 相同的问题。我的解决方案是使用 YAML 转义 JSON::ParserError

YAML.load("\"AACAY, AAOI, AAON, AATI, ABAX,ZYXI\"")
=> "AACAY, AAOI, AAON, AATI, ABAX,ZYXI"

但要小心陷阱。见this SO thread

【讨论】:

    【解决方案2】:

    它是 JSON 解析器中的一个错误,自 json gem 的 v2.0 起已修复。

    # json_parser_test.rb
    require 'json'
    puts JSON.parse("\"AACAY, AAOI, AAON, AATI, ABAX,ZYXI\"")
    

    maxcal@MaxBook ~/p/s/tmp> gem list json
    
    *** LOCAL GEMS ***
    
    json (1.8.3)
    json-schema (2.7.0)
    jsonapi (0.1.1.beta6)
    jsonapi-parser (0.1.1.beta3)
    jsonapi-renderer (0.1.1.beta1)
    multi_json (1.12.1, 1.11.2)
    maxcal@MaxBook ~/p/s/tmp> ruby json_parser_test.rb 
    /Users/maxcal/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/common.rb:156:in `parse': 784: unexpected token at '"AACAY, AAOI, AAON, AATI, ABAX,ZYXI"' (JSON::ParserError)
        from /Users/maxcal/.rbenv/versions/2.3.1/lib/ruby/2.3.0/json/common.rb:156:in `parse'
        from json_parser_test.rb:2:in `<main>'
    

    升级 JSON gem 使解析器错误消失:

    maxcal@MaxBook ~/p/s/tmp> gem install json -v 2.0
    Fetching: json-2.0.0.gem (100%)
    Building native extensions.  This could take a while...
    Successfully installed json-2.0.0
    Building YARD (yri) index for json-2.0.0...
    Done installing documentation for json after 2 seconds
    1 gem installed
    maxcal@MaxBook ~/p/s/tmp> ruby json_parser_test.rb 
    AACAY, AAOI, AAON, AATI, ABAX,ZYXI
    

    【讨论】:

      【解决方案3】:

      JSON.parse() 不适用于所有字符串格式。 字符串需要具有以下格式。 "{\"AACAY\":\"AAOI\", \"AAON\":\"AATI\", \"ABAX\":\"ZYXI\"}" 其中包含字符串化对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-31
        • 2015-10-05
        • 1970-01-01
        • 2020-02-05
        • 1970-01-01
        • 1970-01-01
        • 2015-10-19
        相关资源
        最近更新 更多