2013-05-31 6 views
0

Im, используя рельсы для crunchbase api, чтобы вытащить информацию для компаний, и я боролся с этой ошибкой всю ночь. Он завершает один запроса успешно и после строительства второго запроса он выходит из строя, и я получаю эту ошибку:Несколько запросов JSON Ruby

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

ответ

1

Я не уверен, почему именно это происходит, но вместо использования цикла while вы можете использовать потоки для запуска нескольких запросов. Я лично не думаю, что запросы на цикл - хорошая идея.

Взгляните на этот пример:

Ruby on Rails Multiple HTTP request at the same time?

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) 

и посмотреть, если он не на первом или втором запросе.

Edit: Я держу пари, что у вас есть некоторый характер Crack/Psych не нравится в самом начале вашего 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 ': (): найдено неизвестный escape-символ при разборе цитируемого скаляра в строке 1 столбец 1 (Psych :: SyntaxError) – rich

+0

Запустите каждый из них вручную в консоли и добавьте результаты 'puts resp' к вашему вопросу. Слишком сложно диагностировать «здесь». – Narfanator

+0

Нашел ответ, не знаю, почему это сработало, но это происходит, заменив: Crack :: JSON.parse (соответственно) только с JSON.parse (resp) – rich