2013-05-31 64 views
0

我使用rails与crunchbase api来拉下公司的信息,我一直在整夜对抗这个错误。它完成一个请求成功,构建崩溃的第二请求之后,我收到此错误:多个JSON请求红宝石

Error/Users/Rich/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/psych.rb:205:in `parse': 
(<unknown>): control characters are not allowed at line 1 column 1 (Psych::SyntaxError) 

我可以尽可能多的代码需要发布。所有的帮助非常感谢,因为我是一个红宝石新手。

def get_data(company_links) 
    while i < company_links.length 
    puts "USING URL #{URL}#{company_links[i]}.js?#{API_Key}" 
    resp = RestClient.get("#{URL}#{company_links[i]}.js?#{API_Key}") 
    arr = Crack::JSON.parse(resp) 
    i += 1 
    end 
end 

调用方法

links_array = ["dropbox","twitter"] 
get_data(links_array) 

编辑答案找到 真的不知道为什么它的工作原理,但即时不抱怨,它解决了。感谢大家谁提供的帮助,我真的很感激:)

 
def get_data(links_array) 
    links_array.each do |company| 
    puts "USING URL #{URL}#{company}.js?#{API_Key}" 
    resp = RestClient.get("#{URL}#{company}.js?#{API_Key}") 
    arr = JSON.parse(resp) 
    puts arr["name"] 
    end 
end 

+0

是'def get_data(...)'文件的第一行吗?错误消息表明错误发生在第1行第1列中 –

+0

这是指文件的第一行还是响应?我的第一行是要求'rubygems' – rich

回答

2

它看起来像你的问题是你要回来,而不是它的抓取的JSON。诊断有:

def get_data(company_links) 
    company_links.each do |company| 
    puts "USING URL #{URL}#{company}.js?#{API_Key}" 
    resp = RestClient.get("#{URL}#{company}.js?#{API_Key}") 
    puts "RETURNS: #{resp}" 
    arr = Crack::JSON.parse(resp) 
    end 
end 

也可以尝试

links_array = ["twitter","dropbox"] 
get_data(links_array) 

,看看它是否失败的第一或第二请求。

编辑:我打赌你有一些字符裂缝/精极度紧张并没有在你的JSON字符串的最开始喜欢的,这是一个“控制字符”;)

EDIT2:如果JSON打印到控制台是有效的,请尝试arr = Crack::JSON.parse(resp.to_s)arr = Crack::JSON.parse(resp.inspect)。我对这里的很多重要细节很模糊。

+0

真的很感谢我一直在经历你的建议和一个非常奇怪的错误的帮助。它为一家公司打印的json完全有效,然后死亡。编辑2产生了不同的错误:/Users/Rich/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/psych.rb:205:in'parse':():found未知的转义字符,同时在第1行第1列解析引用的标量(Psych :: SyntaxError) – rich

+0

在控制台中手动运行每个手动获取并将'puts resp'的结果添加到您的问题。太难以从“这里”诊断。 – Narfanator

+0

找到答案,不知道为什么这个工作,但它通过替换:Crack :: JSON.parse(resp)只有JSON.parse(resp) – rich