在ruby中的JSON解析失败了

时间:2017-02-08 21:55:56

标签: ruby-on-rails json ruby

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

<div class="btn btn-default" (click)="addRow(someArray, someObject)"></div>

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

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

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

为什么ruby调用失败?

3 个答案:

答案 0 :(得分:2)

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

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

谨防陷阱。见this SO thread

答案 1 :(得分:0)

它是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

答案 2 :(得分:0)

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