2016-11-20 46 views
0

我使用Ruby與sinatra上的rest API。 我從IAMPORT支付信息,,,Ruby上的sinatra,JSON :: parserError問題和757:意外的令牌

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 

但是,我得到錯誤信息...就像在/支付757下方

JSON :: ParserError:在「意外的標記 「{\」 碼\「:0,\」message \「:null,\」response \「:{\」access_token \「:\」9898 ....「,」...「}}''

我解決了這個問題?我認爲,有問題,變量'JSON'不是HASH ..

謝謝。

+0

我也使用這些代碼。 #json = JSON.parse(response,:symbolize_names => true) 但是,在這種情況下,有錯誤,未定義的方法'[' –

回答

1

不要將響應轉換爲json。它已經是json了。

替換以下行:

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

有:

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

爲什麼需要'to_s'? –

+0

@Зелёный,忘記了響應是字符串狀的對象。刪除了'to_s'。感謝您的反饋。 – falsetru

+0

根據文檔迴應它是一個對象,但https://github.com/rest-client/rest-client#usage-raw-url'response.body'返回一個字符串我有點困惑。但你的回答是對的。 –