JSON :: ParseError(822:'#34;'的意外令牌)

时间:2018-03-04 13:38:35

标签: json ruby

我在Ruby中使用JSON,每次运行程序时,都会收到"意外令牌的错误。"我不确定发生了什么,我尝试从其他有相同问题的用户那里阅读信息,但我似乎并不知道发生了什么。

这是我的.rb页面的代码:

def show
  URI.parse('http://robotrevolution.net/interface/int_order_options.php')
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = false
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER

  request = Net::HTTP::Post.new(uri.request_uri, initheader = {'Content-Type' => 'application/json'})

  request.basic_auth 'username', 'password'
  response = http.request(request)

  if response.code == "200"
    result = response.body.to_json.first
    @oc_order_options =  JSON.parse(result, :quirks_mode => true)
  else
    "ERROR"
  end
  return @oc_order_options
end

这是我的展示页面的代码:

<h1> Display </h1>

<%= @oc_order_options['name'][0]['value'] %>

我非常感谢任何帮助我弄清楚发生了什么的回复,谢谢。

2 个答案:

答案 0 :(得分:1)

错误在于:

result = response.body.to_json.first

尝试在此行之前放置puts response.body.inspect,找出数据返回的内容并相应地修改上面的行,以便下一行

JSON.parse(result, :quirks_mode => true)

会成功。

答案 1 :(得分:0)

mudasobwa是对的,错误发生在result = response.body.to_json.first信息的格式已经在json中 - 这就像将它转换为json一样,它不喜欢它。

所以在JSON.parse(result, :quick_mode => true)上我添加了.first到这一行并摆脱了另一行。

所以简单地说,它看起来像这样:

def show
 URI.parse('http://robotrevolution.net/interface/int_order_options.php')
 http = Net::HTTP.new(uri.host, uri.port)
 http.use_ssl = false
 http.verify_mode = OpenSSL::SSL::VERIFY_PEER

  request = Net::HTTP::Post.new(uri.request_uri, initheader = {'Content-Type' => 'application/json'})

 request.basic_auth 'username', 'password'
 response = http.request(request)

if response.code == "200"
  result = response.body.to_json.first
  @oc_order_options =  JSON.parse(result, :quirks_mode => true)
else
  "ERROR"
end
  return @oc_order_options

现在它看起来像这样:

def show
 URI.parse('http://robotrevolution.net/interface/int_order_options.php')
 http = Net::HTTP.new(uri.host, uri.port)
 http.use_ssl = false
 http.verify_mode = OpenSSL::SSL::VERIFY_PEER

  request = Net::HTTP::Post.new(uri.request_uri, initheader = {'Content-Type' => 'application/json'})

 request.basic_auth 'username', 'password'
 response = http.request(request)

if response.code == "200"
  result = response.body
  @oc_order_options =  JSON.parse(result, :quirks_mode => true).first
else
  "ERROR"
end
  return @oc_order_options
end

谢谢!