Проблемы с обработкой HTTP-ответов и анализом данных JSON - PullRequest
1 голос
/ 10 марта 2011

Я использую Ruby on Rails 3, и я хотел бы решить проблему со следующим кодом, когда приложение веб-клиента получает некоторые данные JSON из приложения веб-службы, которое использует промежуточное программное обеспечение Rack для ответа.

В модели приложения веб-клиента у меня есть

response_parsed = JSON.parse(response.body)
if response_parsed["account"]
  ...
else
  return response
end

В приведенном выше коде response.body возвращается из приложения веб-службы, которое использует промежуточное программное обеспечение Rack для ответа веб-клиенту:

accounts = Account.where(:id => ids)
[200, {'Content-Type' => 'application/json'}, accounts.to_json] # That is, response.body = accounts.to_json

Передача данных в порядке, но я получаю следующую ошибку

TypeError
can't convert String into Integer

*Application Trace* 
lib/accounts.rb:107:in `[]'

Строка 107 соответствует

if response_parsed["account"]
  ...

Где и что такоепроблема?Как это решить?


Если я попытаюсь отладить respons.body, я получу

# Note: this is an array!
"[{\"account\":{\"firstname\":\"Semio\",\"lastname\":\"Iaven\"\"}}]"

1 Ответ

3 голосов
/ 10 марта 2011

Если я говорю то, что вы уже понимаете, простите меня.

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

Если вы вместо этого сделаете:

response_parsed[0]['account']

Кажется, ты получишь то, что хочешь.

...