In the same vein as the builder note, instead of re-raising, you could assign a parser exception here.

    def parsed_body
      @exception = nil
      ...
    rescue
      @exception = ReadError.new(json_string)
      {}
    end