Oj :: ParseError: недопустимый идентификационный номер - "^ rc" - PullRequest
0 голосов
/ 15 января 2019

Почему возникла ошибка при разборе строки json (с анализатором Oj), которая содержит «^ r» в сочетании с другим символом?

Ошибка - "^ r":

Oj.load("{\"s\":{\"s\":[\"^rc\"]}}")
=> Oj::ParseError: not a valid ID number at line 1, column 15 

Нет ошибок - "^ b" или "^ r":

Oj.load("{\"s\":{\"s\":[\"^bc\"]}}")
=> {"s"=>{"s"=>["^bc"]}}

Oj.load("{\"s\":{\"s\":[\"^r\"]}}")
=> {"s"=>{"s"=>["^r"]}}

UPD Как узнать, какие возможные комбинации символов могут вызвать ошибку Oj::ParseError: not a valid ID number. Oj::ParseError слишком широко, чтобы спастись - An Exception that is raised as a result of a parse error while parsing a JSON document.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Прочитайте документ, прежде чем спрашивать. Ой док ясно: https://github.com/ohler55/oj/blob/master/pages/Encoding.md

0 голосов
/ 15 января 2019

Oj почти полностью написан на , поэтому я не собираюсь перепроектировать его, чтобы ответить на не по теме вопрос «почему не работает код».

Некоторый реверс-инжиниринг его поведения - это хорошо.

▶ Oj.dump(foo: "^bar")
#⇒ "{\":foo\":\"^bar\"}"
▶ Oj.dump(foo: "^rar")
#⇒ "{\":foo\":\"\\u005erar\"}"

Тем не менее, знает что-то о ^r. Чтобы преодолеть эту проблему, подготовьте свой груз:

▶ Oj.load("{\"s\":{\"s\":[\"^rc\"]}}".gsub(/\^/, "\\u005e"))
#⇒ {"s"=>{"s"=>["^rc"]}}

FWIW, последняя версия Oj на моей машине довольно хорошо анализирует ваш ввод, как без сбоев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...