【问题标题】:syntax error, unexpected end-of-input, expecting keyword_end语法错误,意外的输入结束,期待关键字结束
【发布时间】:2013-09-18 16:56:10
【问题描述】:

我正在尝试编写一个简单的程序来从 API 调用的结果中解析 JSON。对 ruby​​ 非常陌生,只是无法弄清楚这一点。

所有代码如下:

require "rubygems"
require "json"
require "net/http"
require "uri"

uri = URI.parse("http://api.chartbeat.com/live/recent/v3/?apikey=eaafffb9a735796b6edd50fd31eaab69&host=enactus.org")

http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)

response = http.request(request)

if response.code == "200"
  result = JSON.parse(response.body)

  result.each do |doc|
    puts doc["id"] #reference properties like this
    puts doc # this is the result in object form    
    puts ""
    puts ""
  end
else
  puts "ERROR!!!"
end

这是运行程序的输出(chartbeat.rb):

chartbeat.rb:14: syntax error, unexpected end-of-input, expecting keyword_end

程序从这里逐字逐句替换了 url:https://gist.github.com/timsavery/1657351

【问题讨论】:

  • 你上面的代码对我来说很好
  • 您不应在此处发布您的 API 密钥。它也适用于我(复制并粘贴到 irb)
  • 是时候重置 API 密钥了 :)
  • 尝试删除你的`result.each do |doc|`块,看看你得到了什么。
  • 想通了:我已经进行了@MichaelDurrant 建议的编辑,但忘记将程序恢复到原始状态。在正确的位置按原样运行它可以正常工作。谢谢大家。我是n00b。

标签: ruby json uri net-http


【解决方案1】:

看起来你正在做的事情并没有利用 Net::HTTPS 的任何力量,所以我可能会这样做:

require "rubygems"
require "json"
require "open-uri"

response = open("http://api.chartbeat.com/live/recent/v3/?apikey=eaafffb9a735796b6edd50fd31eaab69&host=enactus.org").read

result = JSON.parse(response)

result.each do |doc|
  puts doc["id"] #reference properties like this
  puts doc # this is the result in object form
  puts ""
  puts ""
end

OpenURI 是许多访问 URL 的代码的基础,是一个很好的起点。

如果您想捕获引发的异常,请使用类似:

begin
  response = open("http://api.chartbeat.com/live/recent/v3/?apikey=eaafffb9a735796b6edd50fd31eaab69&host=enactus.org").read
rescue Exception => e
  puts e.message
  exit
end

甚至可以简化为:

require "rubygems"
require "json"
require "open-uri"

JSON[
  open("http://api.chartbeat.com/live/recent/v3/?apikey=eaafffb9a735796b6edd50fd31eaab69&host=enactus.org").read
].each do |doc|
  puts doc["id"] #reference properties like this
  puts doc # this is the result in object form
  puts ""
  puts ""
end

但这可能太激烈了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    相关资源
    最近更新 更多