【问题标题】:Ruby on sinatra, JSON::parserError issue and 757: unexpected tokenRuby on sinatra、JSON::parserError 问题和 757:意外令牌
【发布时间】:2017-04-03 19:02:38
【问题描述】:

我在带有 sinatra 的 Ruby 上使用 rest API。 我从 IAMPORT 获得了付款信息,,,

def get_authrestapi()
    @key = IMP_KEY
    @secret = IMP_SECRET

    response = RestClient.post 'https://api.iamport.kr/users/getToken', {'imp_key' => @key, 'imp_secret' => @secret}, :accept => :json

    json = JSON.parse(response.to_json, symbolize_names: true)

    return json['response']['access_token']
end

但是,我收到了错误消息...如下所示

JSON::ParserError at /payments 757: '"{\"code\":0,\"message\":null,\"response\":{\"access_token\":\"9898 出现意外令牌....", "..."}}"'

我该如何解决这个问题?我认为,变量 'json' 不是 HASH 存在问题..

谢谢。

【问题讨论】:

  • 我也使用这些代码。 # json = JSON.parse(response,:symbolize_names => true) 但是,在这种情况下,未定义方法 '['
  • 这个here有更好的解决方案。

标签: json ruby parsing hash sinatra


【解决方案1】:

不要将响应转换为 json。已经是json了。

替换以下行:

json = JSON.parse(response.to_json, symbolize_names: true)

与:

json = JSON.parse(response, symbolize_names: true)

【讨论】:

  • @Зелёный,忘记了响应是类似字符串的对象。删除了to_s。感谢您的反馈。
  • 根据文档响应它是一个对象,但 github.com/rest-client/rest-client#usage-raw-url response.body 返回一个字符串我有点困惑。但你的答案是对的。
  • @Зелёный,根据github.com/rest-client/rest-client#result-handling,2.0 中的新功能:RestClient::Response 对象现在是 String 的子类。以前,它们是一个真正的 String 对象,混合了响应功能,使用起来非常混乱。
  • @falsetru 我将 line: json = JSON.parse(response.to_json, symbolize_names: true) 替换为 json = JSON.parse(response, symbolize_names: true) 但是,我收到了这样的错误消息: NoMethodError at /payments undefined method `[]' for nil:NilClass 我认为这部分有问题:return json['response']['access_token']
  • 在之前的错误中,我可以检查字符串 obj: "'{\"code\":0,\"message\":null,\"response\":{\"access_token\‌​ ":\"9898....", "..."}}"' 所以,响应有付款信息,对吧。但是,我无法在 JSON.parse(...) 之后访问带有哈希数据结构的 json。显然,有 'response' 键,包括 'access_token' 键和值......这太难了..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 2021-03-05
  • 2014-10-06
相关资源
最近更新 更多