JSON :: ParserError:743:ROR中的意外标记

时间:2017-02-14 19:43:07

标签: ruby-on-rails ruby rest-client

尝试解析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 '{

2 个答案:

答案 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端点网址,并确保使用正确的网址。

在这种情况下,

我应该使用https://www.bloc.io/api/v1/sessions