Ruby: JSON.parse возвращает неопределенный метод `bytesize 'для - PullRequest
7 голосов
/ 13 мая 2011
response = Typhoeus::Request.get("http://localhost:3000/api/api_email/#{@api_id}.json")
    JSON.parse(response.body)

Ответ является объектом JSON, но я получаю сообщение об ошибке при попытке его проанализировать.

undefined method `bytesize' for 

Я хочу получить доступ к объекту JSON.

Ошибка:

NoMethodError at /api/v1/a71040739d6cc50e89aff56601af67/2011-10-1
undefined method `bytesize' for {"xpto"=>{"email

"=>"test@gmail.com"}}:Hash

file: utils.rb location: bytesize line: 239

BacktracE:

/Users/donald/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/webrick/httpserver.rb in service
      si.service(req, res)
/Users/donald/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/webrick/httpserver.rb in run
          server.service(req, res)
/Users/donald/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/webrick/server.rb in block in start_thread
          block ? block.call(sock) : run(sock)

Вот как генерируется:

 @api_id = params[:api_id]
 @bucket = Bucket.where(:api => @api_id)
 respond_with(@bucket, :only => [:email])

Возвращаемый файл .json содержит:

[{"xpto":{"email":"test@gmail.com"}}]

Ответы [ 2 ]

6 голосов
/ 13 мая 2011

Это странно, так как кажется, что response.body уже является Hash!(т.е. проанализировал строку JSON), или, может быть, вы видите это в журнале своего вебрика, и, таким образом, проблема в генерации ответа JSON, а не в его синтаксическом анализе.Обратный след не имеет смысла: (

2 голосов
/ 13 мая 2011

Возможно, это проблема совместимости. Вероятно, у вас не возникнет этой проблемы, если вы используете ruby1.9, но если вы используете другие версии / реализации, такие как ruby ​​1.8 или IronRuby, String#bytesize может быть не определено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...