Несколько запросов JSON Ruby

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

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)

Edit Answer Found Don't really know why it works but im not complaining that its solved. Thanks to everyone who provided assistance I really appreciate it :)

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


person rich    schedule 31.05.2013    source источник
comment
Является ли def get_data(...) первой строкой вашего файла? Сообщение об ошибке предполагает, что ошибка возникает в строке 1, столбце 1.   -  person Patrick Oscity    schedule 31.05.2013
comment
Это относится к первой строке файла или к ответу? Моя первая строка требует «rubygems»   -  person rich    schedule 31.05.2013


Ответы (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)

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

Редактировать: я держу пари, что у вас есть какой-то персонаж, который Crack/Psych не любит в самом начале вашей строки JSON, и что это «управляющий символ»;)

Edit2: если JSON, напечатанный на консоли, действителен, попробуйте arr = Crack::JSON.parse(resp.to_s) или arr = Crack::JSON.parse(resp.inspect). Я не знаю многих важных деталей здесь.

person Narfanator    schedule 31.05.2013
comment
Очень ценю помощь, которую я рассматривал в ваших предложениях, и это действительно странная ошибка. JSON, который он печатает для одной компании, полностью действителен, а затем умирает. Редактирование 2 привело к другой ошибке: : обнаружен неизвестный escape-символ при анализе скаляра в кавычках в строке 1 столбца 1 (Psych::SyntaxError) - person rich; 31.05.2013
comment
Запустите каждый get вручную в консоли и добавьте результаты puts resp к своему вопросу. Отсюда сложно поставить диагноз. - person Narfanator; 31.05.2013
comment
Нашел ответ, понятия не имею, почему это сработало, но он работает, заменив: Crack:: JSON.parse(resp) только JSON.parse(resp) - person rich; 31.05.2013

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

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

Ruby on Rails Несколько HTTP-запросов одновременно?< /а>

person whizzkid    schedule 31.05.2013