【发布时间】:2019-12-19 09:03:04
【问题描述】:
我正在从我的 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
【问题讨论】:
-
JSON.parse似乎是你要找的东西 -
这是一个 Ruby Hash 被原始发出,而不是作为 JSON 对象发出。渲染时尝试
to_json。media_url不渲染,但其他东西会。 -
我试过 JSON.parse,得到了这种错误:JSON::ParserError (767: unexpected token at '{"screen_name"=>"KimberlyNFoster", "name"=>"Kimberly Nicole Foster ", "id"=>142116606, "id_str"=>"142116606", "indices"=>[0, 16]}')
-
to_json 添加了更多 "\" => "\"{\\\"screen_name\\\"=\\u003e\\\"KimberlyNFoster\\\", \\\"name\\ \"=\\u003e\\\"金佰利妮可福斯特\\\", \\\"id\\\"=\\u003e142116606, \\\"id_str\\\"=\\u003e\\\"142116606 \\\", \\\"索引\\\"=\\u003e[0, 16]}\""
-
你是怎么做到的?
h[:"media"][0]的对象不是有效的 json (它看起来像Hash通过to_s转换为String)如果您需要将Hash转换为 JSON,方法是to_json但您应该解释首先这是如何生成的,或者只是使用twittergem 而不必太担心实现
标签: ruby-on-rails json ruby