Извлечение JSON из URL с помощью Ruby, выбрасывание TypeError и «Не удалось открыть TCP-соединение» - PullRequest
0 голосов
/ 03 ноября 2019

Фон

У меня есть терминальное приложение Ruby, которое генерирует URL-адрес, а затем извлекает JSON из этого URL-адреса.

Вручную по ссылке (https://www.googleapis.com/books/v1/volumes?q=Harry+Potter) показывает объект JSON, но программа выдает две ошибки.

  1. (без неявного преобразования массива в строку) (TypeError)
  2. Не удалось открыть TCP-соединение с [{"kind "=>" books # volume "," id "=>" 2sSMCwAAQBAJ "," etag "=>" vAZ9LJGLnng "," selfLink "=>" https://www.googleapis.com/books/v1/volumes/2sSMCwAAQBAJ", "volumeInfo" => {"title" => «Гарри Поттер и проклятое дитя - первая и вторая части (специальная репетиционная версия)», «авторы» => [«Дж. К. Роулинг», «Джон Тиффани», «Джек Торн»] ... (очень длинный)

Я смущен, так как он говорит, что не может открыть соединение, но данные есть, хотя они в другом формате.

Мой код

Соответствующий код выглядит следующим образом.

    response = Net::HTTP.get_response(link,"")
    puts response.body -- error is thrown on line above, so this is commented out

Примечание: «ссылка» в данном случае является первой ссылкой, которую я дал.

Вопрос

Как я могу исправить указанные ошибки,чтобы мое приложение получало объект JSON?

1 Ответ

1 голос
/ 03 ноября 2019

Чтобы получить ответ, попробуйте это:

require 'json'
require 'net/http'

url = 'https://www.googleapis.com/books/v1/volumes?q=Harry+Potter'

# get JSON as String
json = Net::HTTP.get(URI.parse(url))

# get Hash from JSON
hash = JSON.parse(json)

Проблема была в разборе URI.

Вы также можете сделать это как:

Net::HTTP.get_response(URI.parse(url)).body
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...