意外..编写水晶 JSON 转换器时出现意外的令牌异常



为什么使用此 JSON 转换器/解析器总是导致异常 ( Unexpected token: EOF at 1:98 (?

class MyParser
  def self.from_json(value : JSON::PullParser) : String
    "static"
  end
  # ...
end
class User
  JSON.mapping(
    first_name: {type: String, converter: MyParser},
    last_name: {type: String, converter: MyParser}
  )
end

JSON::PullParser的使用总是要求您使用一个完整的值。如果不想读取 json 值,可以使用 JSON::PullParser#skip

若要直观地了解原因,请考虑将JSON::PullParser作为 JSON 流中的游标。当调用 from_json 方法时,光标位于流中,就像"key": |"value"一样,其中|是光标位置(显然"value"可以是数组、另一个对象或任何内容(。如果通过在PullParser上调用read_string来读取字符串,则可以"key": "value"|并且光标已准备好读取,,然后读取下一个对象键,或者}如果它是对象的末尾。如果您不想读取该值,则必须调用skip以达到与调用read_string相同的状态,否则解析器将处于无效状态。

最新更新