В базата данни на моите релси имам обект с текстово поле, което е валидно json:
""AACAY, AAOI, AAON, AATI, ABAX,ZYXI""
Ако се обадя на JSON.parse на полето в рубин, то грешки с това:
JSON::ParserError: 784: unexpected token at ""AACAY, AAOI, AAON, AATI, ABAX,ZYXI""
Ако обаче се обадя на JSON.parse на същия низ в браузъра, който работи.
Защо рубинът не се обажда?
Отговори:
0 за отговор № 1Нейната грешка в JSON анализатор, който е фиксиран като v2.0 на json gem.
# 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 прави грешката на анализатора да изчезне:
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 за отговор № 2
Срещам същия проблем с JSON.parse за низ, вмъкнат в JSON низ. Моето решение беше да избягам JSON::ParserError
с YAML.
YAML.load(""AACAY, AAOI, AAON, AATI, ABAX,ZYXI"")
=> "AACAY, AAOI, AAON, AATI, ABAX,ZYXI"
Пазете се от gotchas все пак. виждам тази тематична тема
0 за отговор № 3
JSON.parse () не работи с всички низови формати. Веригата трябва да има следния формат. "" AACAY ":" AAOI "," AAON ":" AATI "," ABAX ":" ZYXI " който съдържа структуриран обект.