You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符串形式的嵌套哈希(nested hash)转换回哈希(hash)?

嘿,这个问题我太熟了!在Ruby里要把这种Ruby哈希格式的字符串转成真正的哈希对象,有几种实用的办法,我给你掰扯清楚:

方法一:用eval快速解决(但要注意安全风险)

你的字符串本身就是合法的Ruby哈希语法,直接用eval就能把它转成真实的哈希:

# 先读取文件内容得到字符串
hash_string = File.read('your_file.txt')
# 解析成哈希
parsed_hash = eval(hash_string)
# 验证一下类型,会输出 Hash
puts parsed_hash.class

⚠️ 敲黑板!安全提醒:这种方法只适用于你100%信任文件内容的场景!如果文件里被人偷偷塞了恶意Ruby代码,eval会直接执行,那麻烦可就大了。

方法二:更安全的长期方案(推荐)

如果可以重新存储你的哈希,强烈建议用JSON格式来序列化和读取,这样既安全还能跨语言通用:

第一步:存储哈希时转成JSON格式

original_hash = {"SONGS"=>{1=>["2018-05-29 18:19:14 +0530", "HAPPY", "Meri Sapnon Ki Rani"]}}
# 把哈希转成JSON字符串写入文件
File.write('songs.json', original_hash.to_json)

第二步:读取时解析JSON

# 先引入JSON库(Ruby默认自带)
require 'json'
# 读取文件内容
json_string = File.read('songs.json')
# 解析成哈希
parsed_hash = JSON.parse(json_string)

# 小细节:JSON解析会把整数键转成字符串,要是需要还原成整数可以这么处理
parsed_hash["SONGS"] = parsed_hash["SONGS"].transform_keys(&:to_i)
# 现在parsed_hash就是你要的哈希对象啦
折中方案:没法重新存储?试试正则转JSON再解析

如果没办法重新生成文件,又担心eval的安全问题,可以尝试把Ruby哈希格式转成JSON格式再解析,不过这种方法有局限性(比如哈希里的字符串包含=>就会出错):

require 'json'
hash_string = File.read('your_file.txt')
# 把Ruby的=>替换成JSON的:,处理数字和字符串键
json_string = hash_string.gsub(/(\w+|\d+)=>/) { |m| "#{m.chomp('=>')}:" }
# 解析成哈希
parsed_hash = JSON.parse(json_string)
# 同样处理整数键的问题
parsed_hash["SONGS"] = parsed_hash["SONGS"].transform_keys(&:to_i)

总的来说,能重新存储的话优先用JSON方案,安全又靠谱;实在不行,在完全信任文件内容的情况下用eval最省心。

内容的提问来源于stack exchange,提问作者Salman Shaik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:06:30