【问题标题】:bug in the crack?裂缝中的错误?
【发布时间】:2011-04-16 21:45:57
【问题描述】:

我正在使用 Rubyoverflow gem,它允许从 Ruby 代码使用 Stackoverflow API。而且我注意到有时我会收到错误消息:

Invalid JSON string

我尝试分析代码,发现当 Stackoverflow 的答案包含非 ascii 字符时发生错误。

Rubyoverflow 使用 HTTParty gem,HTTParty gem 使用 Crack gem 解析 JSON 文件。

module Crack
  class JSON
    def self.parse(json)
      json =  json.delete!("^\u{0000}-\u{007F}")  # here is my fix
      YAML.load(unescape(convert_json_to_yaml(json)))
    rescue ArgumentError => e
      raise ParseError, "Invalid JSON string"
    end

我添加了一行代码来从 JSON 中删除所有非 ascii 字符,并且错误已修复。

现在我想了解我需要报告此错误的人是谁。

  1. 是否可以在 JSON 文档中包含非 ascii 字符?
  2. 是否可以在 YAML 文档中包含非 ascii 字符?
  3. 如果标准允许在 JSON 和 YAML 中包含非 ascii 字符 -> YAML 类中的错误。这样对吗?这门课的作者是谁?修复此错误的最佳方法是什么?

【问题讨论】:

  • 快速搜索显示the author can be reached at github。如果它确实是一个错误,那么您将在那里提交错误报告。我不这么认为,但我认为问题在于您不了解规范或如何处理 Unicode。我希望看到修改后的问题,因为“我想了解谁是我需要报告此错误的人”此时对于 SO 来说并不是一个好问题。
  • 本例中没有我的代码。 Stackoverflow 发布 JSON,Rubyoverflow 使用此 JSON,HTTParty 获取此 JSON,Crack 将 JSON 转换为 YAML,YAML-lib 加载此 YAML。问题是他们当中谁是错误的原因。为什么你在 Rubyoverflow 中决定了这个原因?您确定 Stackoverflow 提供正确的 JSON 吗?您确定所有其他 gem 和库都可以正常工作吗?
  • @the Tin Man:确保链接到正确的 github 项目;)。这是原始项目的一个分支,没有额外的提交
  • @phsr,好吧,因为你没有链接到正确的...phsr's Rubyoverflow :-)

标签: ruby json yaml


【解决方案1】:

JSON 和 YAML 文档应根据 HTTP 标头中给出的字符集进行解码,然后应适当解析生成的文档。 JSON 和 YAML 确实 都有一种用 ASCII 表示非 ASCII 字符的方法,但都没有强制使用它们,而不是使用完整的编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2021-11-06
    • 2020-05-10
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多