Есть ли список кодов ошибок JSON? - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь предоставить хороший опыт пользователям, которые используют JSON, а анализатор находится на бэкэнде (Ruby).

Большую часть времени, когда вы получаете плохо отформатированный JSON полезная нагрузка: ошибка имеет формат XXX unexpected token at '<entire payload here>'. Это не очень удобно и не практично.

Мой вопрос таков: есть ли список кодов ошибок XXX, которые могли бы помочь в создании более качественных сообщений об ошибках, которые могли бы понять новички и не очень технологичные люди?

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

XXX при такого рода ошибках не является специальным кодом ошибки. Это просто номер строки из файла, где возникла эта ошибка. Например, для Ruby 2.5.1 вы получите JSON::ParserError (765: unexpected token at https://github.com/ruby/ruby/blob/v2_5_1/ext/json/parser/parser.rl#L765

0 голосов
/ 20 февраля 2020

Вы можете найти список в документации для модуля.

Думаю, что это охватывает его:

JSON::JSONError
JSON::GeneratorError
JSON::GenericObject
# The base exception for JSON errors.
JSON::MissingUnicodeSupport
# This exception is raised if the required unicode support is missing on the system. Usually this means that the iconv library is not installed.
JSON::NestingError
# This exception is raised if the nesting of parsed data structures is too deep.
JSON::ParserError
# This exception is raised if a parser error occurs.
JSON::UnparserError
# This exception is raised if a generator or unparser error occurs.

JSON::JSONError - родительский класс, поэтому Вы можете избавиться от этого и при необходимости предоставить сообщения для каждого класса ошибок.

Мне кажется, стоит отметить, что, по моему опыту, подавляющее большинство ошибок, относящихся к JSON, относится к классу JSON::ParserError. Другая распространенная проблема, которую стоит рассмотреть, это получение ArgumentError, если nil передано в качестве аргумента.

В качестве примера того, как это можно использовать, вы можете работать с чем-то вроде следующего:

begin
  JSON.parse(your_json)
rescue JSON::JSONError, ArgumentError => e
  { error: I18n.t(e.to_s) } # <- or whatever you want to do per error
end

Надеюсь, это поможет - дайте мне знать, как вы поживаете:)

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