【问题标题】:Is there a list of JSON parse error codes?是否有 JSON 解析错误代码列表?
【发布时间】:2020-02-20 11:25:06
【问题描述】:

我正在尝试为使用 JSON 且解析器位于后端 (Ruby) 的用户提供良好的体验。

大多数情况下,当您收到格式错误的 JSON 有效负载时,错误的格式为 XXX unexpected token at '<entire payload here>'。这既不是很人性化,也不是很实用。

我的问题是:是否有一个XXX 错误代码列表可以帮助创建更好的错误消息,让初学者和非技术人员都能理解?

谢谢!

【问题讨论】:

    标签: ruby-on-rails json ruby


    【解决方案1】:

    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

    【讨论】:

    • 你是对的。这意味着我的问题不是好问题,我正在寻找一种方法来告知用户他们的错字是什么。我会把你的答案标记为正确的。谢谢。
    • 谢谢。现在我明白了。检查这个问题的答案stackoverflow.com/questions/1014969/…
    • 哦,确实切换到 MultiJson + Oj 提供了更好的错误消息。我知道 Oj 很快,但我不知道它提供了更准确的解析错误 ^^ 谢谢!
    • 我认为和 OP 一样,这个数字看起来像一个错误代码。将发生错误的文件的行号放在上面似乎没用。我想知道为什么会做出这个决定。
    【解决方案2】:

    您可以在documentation 中找到该模块的列表。

    认为这涵盖了它:

    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 类。另一个值得考虑的常见问题是如果 nil 作为参数传递,则得到 ArgumentError

    作为如何使用它的示例,您可以使用以下内容:

    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
    

    希望对您有所帮助 - 让我知道您的进展情况:)

    【讨论】:

    • 嗨,谢谢。我的问题不够明确。我正在寻找有关 ParserError 案例的更好粒度,因为用户知道出了点问题,但他们不知道是什么。
    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2016-05-24
    相关资源
    最近更新 更多