【发布时间】:2013-11-02 04:00:08
【问题描述】:
我有一些代码在非常相似的情况下运行。这是第一种情况,我有一个电影的imdb_id 我想要详细信息:
url = "http://mymovieapi.com/?id=#{self.imdb_id}&type=json&plot=none&episode=0&lang=en-US&aka=simple&release=simple&business=0&tech=0"
doc = Hpricot(open(url)).to_s
json = JSON.parse(doc)
puts json
puts json["imdb_id"]
这给出了以下结果:
{"rating_count"=>493949,
"genres"=>["Drama", "Romance"],
"rated"=>"PG-13",
"language"=>["English", "French", "German", "Swedish", "Italian", "Russian"],
"rating"=>7.6,
"country"=>["USA"],
"release_date"=>19980403,
"title"=>"Titanic",
"year"=>1997,
"filming_locations"=>"Santa Clarita, California, USA",
"imdb_id"=>"tt0120338",
"directors"=>["James Cameron"],
"writers"=>["James Cameron"],
"actors"=>["Leonardo DiCaprio", "Kate Winslet", "Billy Zane", "Kathy Bates", "Frances Fisher", "Gloria Stuart", "Bill Paxton", "Bernard Hill", "David Warner", "Victor Garber", "Jonathan Hyde", "Suzy Amis", "Lewis Abernathy", "Nicholas Cascone", "Anatoly M. Sagalevitch"],
"also_known_as"=>["Tai tan ni ke hao"],
"poster"=>{"imdb"=>"http://ia.media-imdb.com/images/M/MV5BMjExNzM0NDM0N15BMl5BanBnXkFtZTcwMzkxOTUwNw@@._V1_SY317_CR0,0,214,317_.jpg", "cover"=>"http://imdb-poster.b0.upaiyun.com/000/120/338.jpg!cover?_upt=66ac07591382594194"},
"runtime"=>["194 min"],
"type"=>"M",
"imdb_url"=>"http://www.imdb.com/title/tt0120338/"}
tt0120338
这符合预期。第二种情况,我有同一部电影的title和year:
url = "http://mymovieapi.com/?title=#{self.title}&type=json&plot=simple&episode=0&limit=1&year=#{self.year}&yg=1&mt=none&lang=en-US&offset=&aka=simple&release=simple&business=0&tech=0"
doc = Hpricot(open(url)).to_s
json = JSON.parse(doc)
puts json
puts json["imdb_id"]
由此,我得到完全相同的 JSON 输出:
{"rating_count"=>493949,
"genres"=>["Drama", "Romance"],
"rated"=>"PG-13", "language"=>["English", "French", "German", "Swedish", "Italian", "Russian"],
"rating"=>7.6,
"country"=>["USA"],
"release_date"=>19980403,
"title"=>"Titanic",
"year"=>1997,
"filming_locations"=>"Santa Clarita, California, USA",
"imdb_id"=>"tt0120338",
"directors"=>["James Cameron"],
"writers"=>["James Cameron"],
"actors"=>["Leonardo DiCaprio", "Kate Winslet", "Billy Zane", "Kathy Bates", "Frances Fisher", "Gloria Stuart", "Bill Paxton", "Bernard Hill", "David Warner", "Victor Garber", "Jonathan Hyde", "Suzy Amis", "Lewis Abernathy", "Nicholas Cascone", "Anatoly M. Sagalevitch"],
"also_known_as"=>["Tai tan ni ke hao"],
"poster"=>{"imdb"=>"http://ia.media-imdb.com/images/M/MV5BMjExNzM0NDM0N15BMl5BanBnXkFtZTcwMzkxOTUwNw@@._V1_SY317_CR0,0,214,317_.jpg",
"cover"=>"http://imdb-poster.b0.upaiyun.com/000/120/338.jpg!cover?_upt=ec8bdec31382594417"},
"runtime"=>["194 min"],
"type"=>"M",
"imdb_url"=>"http://www.imdb.com/title/tt0120338/"}
但是当我尝试拨打 puts json["imdb_id"] 时,我收到了这个错误:
no implicit conversion of String into Integer (TypeError)
使用title 和year 获取时总是会发生这种情况,但似乎无法解释,因为 JSON 输出完全相同。
【问题讨论】:
-
是"put json["imdb_id"]"还是"puts"?并且你能发布为第二种类型返回的 json 吗?
-
@AmithKoujalgi 是的,我在这里输入了那个小部分并犯了一个错误。我已经复制了第二个 json 输出,但是完全一样。
-
您为什么使用 Hpricot?为什么要使用 Hpricot 来“解析”收到的 JSON 输出?首先,它不是必需的,它也已被 Nokogiri 取代,因此,IF 您需要解析 HTML,而您不需要,您最好使用更新的 HTML 解析器。
-
@theTinMan 我对 JSON 还很陌生(这是我第一个真正使用它的应用程序),所以感谢您的提醒。我不确定如何从网页中获取 JSON,并且我在其他地方使用 Hpricot,所以用它来做到这一点。我应该怎么做?使用 Nokogiri 还是其他方式?
-
不要使用 Nokogiri 或 Hpricot。您正在请求 JSON 响应,这就是您得到的。