如何解决JSON解析错误:'没有将String隐式转换为Integer'?

时间:2013-12-02 12:12:04

标签: ruby json parsing twitter typeerror

我正在学习正在进行的项目的Twitter搜索API。我可以连接并收到“200”响应。以下代码:

require 'rubygems'
require 'oauth'
require 'json'

=begin
  __code for oauth and creating response__
=end

def print_results(tweets)
  tweets.each do |tweet|
    puts tweet
  end
end

if response.code == '200' then
  tweets = JSON.parse(response.body)
  print_results(tweets)
end

将此结果打印到屏幕上:

statuses
{"metadata"=>{"result_type"=>"recent", "iso_language_code"=>"es"}, "created_at"=>"Mon Dec 02 11:10:53 +0000 2013", "id"=>407466896939044864, "id_str"=>"407466896939044864", "text"=>"Y \"Thérèse\" me recordó sobremanera a \"Madame Bovary\". A mi parecer ambas igual de insulsas.", "source"=>"<a href=\"http://twitter.com/download/android\" rel=\"nofollow\">Twitter for Android</a>", "truncated"=>false, "in_reply_to_status_id"=>nil, "in_reply_to_status_id_str"=>nil, "in_reply_to_user_id"=>nil, "in_reply_to_user_id_str"=>nil, "in_reply_to_screen_name"=>nil, "user"=>{"id"=>159480381, "id_str"=>"159480381", "name"=>"our last autumn", "screen_name"=>"RoxyVarlow", "location"=>"Valencia", "description"=>"Perdóname por lo que pueda hacer cuando no te recuerde.", "url"=>"http://t.co/AjyasSdTXb", ......

但是当我尝试使用JSON解析它时,并提取twit的文本,或者使用:

def print_results(tweets)
  tweets.each do |tweet|
    puts tweet['statuses'][0]['text']
  end
end

或者用:

puts tweet['text']

我收到错误:

rb:17:in `[]': no implicit conversion of String into Integer (TypeError)

我做错了什么?我该如何从响应中提取推文的文本?

1 个答案:

答案 0 :(得分:2)

此代码解决了我的问题:

if response.code == '200' then
  result = JSON.parse(response.body)
  result['statuses'].each do |result|
  puts result
  puts "#{result['user']['screen_name']} : #{result['text']}"
end

似乎response.body包含在“状态”中,所以我需要遍历每个状态成员才能访问推文信息。