尝试解析rest_client的响应时出现此错误。
JSON :: ParserError:743:'{
>处的意外标记require 'rest_client'
require 'json'
class Kele
attr_accessor :data
def initialize(u,p)
#@values = {email: u, password: p}
@values = '{"email": "antblessing@gmail.com", "password": "password"}'
@headers = {:content_type => 'application/json'}
@data = self.post
end
def post
response = RestClient.post 'https://private-anon-8506c5665f-blocapi.apiary-mock.com/api/v1/sessions', @values, @headers
end
end
在Ruby irb中,
r = b.post
=> <RestClient::Response 200 "{\n \"auth...">
JSON.parse(r.body)
=> JSON::ParserError: 743: unexpected token at '{
a = Kele.new(1,2)
=> #<Kele:0x000000042e2e18 @values="{\"email\": \"antblessing@gmail.com\", \"password\": \"password\"}", @headers={:content_type=>"application/json"}, @data=<RestClient::Response 200 "{\n \"auth...">>
a.post.body
=> "{\n \"auth_token\":\"eyJ0eXAiOiJKV1QiLCJhhGciOiJIUzI1NiJ9.eyJhcGlfa2V5IjoiYTc2MDZkNTBhYjA3NDE4ZWE4ZmU5NzliY2YxNTM1ZjAiLCJ1c2VyX2lkIjoyMzAzMTExLCJuYW1lIjoiQmVuIE5lZWx5In0.3VXD-FxOoxaGXHu6vmL8g191bl5F_oKe9qj8Khmp9F0\",\n \"user\":\n {\n \"id\":2307245,\n \"email:\"antblessing@gmail.com\",\n \"created_at\":\"2015-08-11T16:31:08.836-07:00\",\n \"updated_at\":\"2015-11-04T13:13:32.457-08:00\",\n \"facebook_id\":null,\n ...,\n \"gender\":null\n }\n}"
我也尝试使用HTTParty:
require 'HTTParty'
class Kele
include HTTParty
def initialize(email,password)
@options = {query: {email: email, password: password}}
end
def post
self.class.post('https://private-anon-8506c5665f-blocapi.apiary-mock.com/api/v1/sessions', @options)
end
end
我仍然收到此错误:
JSON.parse(a.post.body)
=> JSON::ParserError: 743: unexpected token at '{
答案 0 :(得分:2)
在第二个示例中,r
不是JSON,它是RestClient :: Response对象,无法解析。你需要解析RestClient :: Response的r.body
,就像你在第二个例子中用a.post.body
引用它一样。
r = b.post # => <RestClient::Response 200 "{\n \"auth...">
JSON.parse(r) # => JSON::ParserError: ...
r.body # => "Some valid JSON string"
JSON.parse(r.body) # => Parses "Some valid JSON string"
答案 1 :(得分:0)
我不确定来自JSON的每个错误743的情况是否相同,但在我的情况下是由API端点引起的。它与我想要使用的略有不同。
因此,如果您收到此错误,我会先检查您的API端点网址,并确保使用正确的网址。
在这种情况下,