3

我正在从我的 Rails 后端的 Twitter API 获取推文。我能够在我的数据库中创建推文,然后将推文呈现为 JSON。但推文的一部分仍然显示为字符串。如何将此特定部分转换为 Ruby 哈希,以便我可以访问键:值对?

  • 我试过 .serializable_hash、.hash、to_json,但要么数据类型错误(需要是数组),要么只是添加了更多 \ 字符

  • .strip、.split、.gsub 也不起作用

  • 当我放置字符串时,它看起来像一个哈希,但我无法保存该输出

这是呈现 json 的方式:

   "media": [
      "{\"id\"=>1159941035461529600, \"id_str\"=>\"1159941035461529600\", \"indices\"=>[62, 85], \"media_url\"=>\"http://pbs.twimg.com/media/EBjwOeMVUAAVOia.jpg\", \"media_url_https\"=>\"https://pbs.twimg.com/media/EBjwOeMVUAAVOia.jpg\", \"url\"=>\"https://t.asdco/mFwUSlGEpv\", \"display_url\"=>\"pic.twitter.com/mFwUSlGEpv\", \"expanded_url\"=>\"https://twitter.com/CommonBlackGirI/status/1159941046161170432/photo/1\", \"type\"=>\"photo\", \"sizes\"=>{\"thumb\"=>{\"w\"=>150, \"h\"=>150, \"resize\"=>\"crop\"}, \"medium\"=>{\"w\"=>1122, \"h\"=>819, \"resize\"=>\"fit\"}, \"large\"=>{\"w\"=>1122, \"h\"=>819, \"resize\"=>\"fit\"}, \"small\"=>{\"w\"=>680, \"h\"=>496, \"resize\"=>\"fit\"}}}"
    ]

我试图在序列化程序文件中创建一个方法,但这不起作用,因为它只是字符串,而不是可遍历的哈希

  def media_url
    tweet = self.object
    tweet.media[0]
  end

我想将上面的字符串转换为 Ruby 哈希,以便我可以获得每条推文的 media_url

4

1 回答 1

4

我认为这样的事情会有所帮助:

def media_url
  tweet = self.object
  JSON.parse(tweet.media[0].gsub('=>', ':'))["media_url"]
end

您需要替换=>:才能JSON.parse工作

或者

要获得完整的哈希,您可以使用更通用的方法,例如media

def media
  tweet = self.object
  JSON.parse(tweet.media[0].gsub('=>', ':'))
end
于 2019-08-12T20:43:32.070 回答