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

时间:2018-02-02 16:45:53

标签: crystal-lang

为什么使用此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

1 个答案:

答案 0 :(得分:3)

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

要想象出这是为什么,请将JSON::PullParser视为JSON流中的游标。调用from_json方法时,光标位于流中,如"key": |"value",其中|是光标位置(显然"value"可以是数组,另一个对象,或者任何东西)。如果您通过调用read_string上的PullParser来阅读字符串,则会转到"key": "value"|并且光标已准备好读取,然后是下一个对象键,或{{ 1}}如果它是对象的结尾。如果您不想阅读该值,则必须致电}以达到与您调用skip相同的状态,否则解析器将处于无效状态。< / p>