2017-02-08 3 views
0

В моей базе данных рельсов У меня есть объект с текстовым полем, которое является действительным JSON:JSON синтаксического анализ в рубине неудача

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

Если я позвоню JSON.parse на поле в рубиновых ошибках это с этим:

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

Однако, если я вызываю JSON.parse на той же строке в браузере, он работает.

Почему рубиновый вызов терпит неудачу?

+1

Не ожидает ли JSON.parse JSON, а не фрагмент JSON? –

+0

Я думаю, что ты прав. Я ошибочно полагал, что они делали подобные вещи. – markain

+0

Это работает на моем конце. Вы можете обновить свой «json' gem и попробовать его в« pry or irb ». Я пробовал, чтобы ваша строка прошла правильно. Я использую ruby ​​2.3.1 –

ответ

0

Его ошибка в синтаксическом анализаторе JSON, который исправлен с версии 2.0 json gem.

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

[email protected] ~/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) 
[email protected] ~/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 делает ошибку парсера исчезает:

[email protected] ~/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 
[email protected] ~/p/s/tmp> ruby json_parser_test.rb 
AACAY, AAOI, AAON, AATI, ABAX,ZYXI 
2

Я столкнулся с той же проблемой с JSON.parse для строки, вложенной в строку JSON. Моим решением было избежать JSON::ParserError с YAML.

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

Остерегайтесь ошибок. См. this SO thread

0

JSON.parse() не работает со всеми форматами строки. Строка должна иметь следующий формат. "{\" AACAY \ ": \" AAOI \ ", \" AAON \ ": \" AATI \ ", \" ABAX \ ": \" ZYXI \ "}" , который содержит строковый объект.

Смежные вопросы