从选项卡导致的 Rails JSON 解析器错误中恢复

Recover from Rails JSON ParserError Caused by Tabs

提问人:jrhicks 提问时间:10/16/2023 更新时间:10/16/2023 访问量:50

问:

从带有非法字符(如制表符)的 JSON 中恢复的最佳方法是什么。简单地逃避失败的标签是否合理?

请注意:

module ActiveSupport
  module JSON
    class <<self
      alias_method :alias_for_decode, :decode
    end

    def self.decode(raw_post)
      self.alias_for_decode(raw_post)
    rescue ::JSON::ParserError => ex
      escaped_tabs = raw_post.gsub("\t", "\\t")
      self.alias_for_decode(escaped_tabs)
    end
  end
end
JSON Ruby-on-Rails 红宝石

评论

2赞 tadman 10/16/2023
“合理”在这里是非常主观的。“必要”更容易确定。你能让上游源修复他们的非标准输出吗?
0赞 jrhicks 10/16/2023
可能,但即使得到合理的反馈,也可能需要一个猴子补丁。我的偏好是创建一个类似于上面的新 JSON 解析器,并配置 ActiveSupport Action Dispatch 以使用它(而不是像上面那样的猴子修补)......另一种选择可能是中间件。
2赞 max 10/16/2023
中间件很可能是更好的选择。虽然机器人有一个指南,但它已经过时了。我认为现代版本的 Rails 中引发的异常是 ActionDispatch::Http::P arameters::P arseError
0赞 max 10/16/2023
虽然这里的上下文有些重要。您是否从服务器发出请求并得到错误的响应,或者他们是否使用损坏的 JSON 向您的服务器发送请求?
2赞 tadman 10/17/2023
我已经修复了这样的事情,解决了无效的 UTF-8,使用一个简单的 Rack 处理程序来查找 JSON 提交并在必要时“修复”它们。可能值得在这里做同样的事情,而不是修补 JSON 解码器本身。

答: 暂无答案