Выходные данные YELP JSON не преобразуются в хэш ruby - PullRequest
0 голосов
/ 21 октября 2011

Вот мой YELP-клиент, использующий печать, но как только я получаю ответ, я не могу преобразовать в хэш ruby ​​для проверки элемента ответа.

require 'rubygems'
require 'json'
require 'net/http'


client = Signet::OAuth1::Client.new(
  :client_credential_key =>
    'xxxxxxxxxxxxxxxxxxx',
  :client_credential_secret =>
    'xxxxxxxxxxxxxxxxxxx',
  :token_credential_key =>
    'xxxxxxxxxxxxxxxxxxx',
  :token_credential_secret => 
    'xxxxxxxxxxxxxxxxxxx'
)
response = client.fetch_protected_resource(
  :uri => 'http://api.yelp.com/v2/search?term=food&location=san+francisco'
)
# The Rack response format is used here
status, headers, body = response
puts body["businesses"]

Ошибка: `[] ': не могупреобразовать String в Integer (TypeError)

Тело печатается нормально в хорошем формате JSON, но я могу сделать body ["business"], например JSON.parse (body) .inspect также не работает

Кстати, выходные данные тела отображаются в формате JSON, но JSON.parse (body) не создает хеш

puts body

{"region":{"span":{"latitude_delta":0.0,"longitude_delta":0.0},"center":{"latitude":37.660418999999997,"longitude":-121.876508}},"total":853,"businesses":[{"rating":4.0,"mobile_url":"http://m.yelp.com/biz/TT1t4oHeZmqkoiuwgCN4bQ","rating_img_url":"http://media2.ak.yelpcdn.com/static/201012164084228337/img/ico/stars/stars_4.png","review_count":150,"name":"India Garden","rating_img_url_small":"http://media2.ak.yelpcdn.com/static/20101216418129184/img/ico/stars/stars_small_4.png","url":"http://www.yelp.com/biz/india-garden-pleasanton-2","phone":"9254854800","snippet_text":"We went to this place without seeing any reviews while we returning to San Jose from Cache Creek in Brooks. This place looks like a house which was...","image_url":"http://s3-media4.ak.yelpcdn.com/bphoto/8iFj1S9YaU5IdUazwZOG8A/ms.jpg","snippet_image_url":"http://s3-media3.ak.yelpcdn.com/photo/d2TovvsTn2eUw4xqTB4jyw/ms.jpg","display_phone":"+1-925-485-4800","rating_img_url_large":"http://media4.ak.yelpcdn.com/static/20101216169592178/img/ico/stars/stars_large_4.png","id":"india-garden-pleasanton-2","categories":[["Indian","indpak"],["Pakistani","pakistani"]],"location":{"cross_streets":"Main St & Neal St","city":"Pleasanton","display_address":["210 Rose Ave","(b/t Main St & Neal St)","Pleasanton, CA 94566"],"geo_accuracy":8,"postal_code":"94566","country_code":"US","address":["210 Rose Ave"],"coordinate":{"latitude":37.660418999999997,"longitude":-121.876508},"state_code":"CA"}}]}

Ответы [ 2 ]

1 голос
/ 21 октября 2011

На самом деле, я почти уверен, что тело на этом этапе является массивом, поскольку ответ содержит четыре части, а не три, поэтому последние две части (массив) помещаются в объект body.

Также Array - единственный из известных мне базовых объектов, который жалуется на то, что параметр [] не является целым числом.Если бы это была строка, она попыталась бы найти соответствие регулярному выражению / содержанию.

Итак, чтобы подвести итог, body - это массив, в котором только одно значение содержит строку.Таким образом, чтобы получить хэш (из JSON), вам нужно real_body = JSON.parse body[0].Затем вы должны получить свой хэш, и real_body["businesses"] поместит ваши предприятия (вывод довольно длинный, поэтому я не буду публиковать его здесь)

0 голосов
/ 21 октября 2011

body - это строка, а не хеш.Оператор [] жалуется, потому что оператор string [] принимает только целое число, поэтому он пытается превратить вашу строку в целое и не работает.

edit: это можно проверить, просто распечатав body.class

...