Rails rails hash 表的访问出错问题,请教大神

shlallen · 2013年01月24日 · 最后由 luikore 回复于 2013年01月24日 · 2298 次阅读

a={"updated_at":null, "service_id":"d03bf3ee83aea46d3929f7dafaa9cf11f", "id":8, "credentials":"{\"hostname\":\"172.17.13.102\", \"password\":\"pJLgQTswtbqYR\", \"user\":\"uGeDwna7YV3vF\", \"port\":3306, \"name\":\"d03bf3ee83aea46d3929f7dafaa9cf11f\", \"host\":\"172.17.13.102\", \"node_id\":\"mysql_node_0\", \"username\":\"uGeDwna7YV3vF\"}", "label":"mysql-5.1", "created_at":null, "configuration":"{ \"version\":\"5.1\", \"plan\":\"free\"}"} 请教大家: 以上的我实验中输出的 hash 类型结果,但是我在使用 a["credentials"]["node_id"] 确只返回 node_id.而且还显示 a["credentials"] 的类型是 string,但是可以肯定的是,我是以 hash 表的形式赋值给 a 的“credentials”属性的 请问:1.为什么会出现 string,是不是我哪里没有搞清楚原理?我想访问到正确的 a["credentials"]["node_id"] 2.我赋值的时候,是按 a[:credentials] 的形式赋值的,但是在数据库持久化之后,按 a[:credentials] 确访问不到,必须用 a[“credentials”],从符号转换为 string 是为什么,是自动的吗?

问题肯定在 a["credentials"] 赋值时给了一个字符串 (用了to_json吧?) 而不是 hash, 所以你取值时还得 parse 成 hash: JSON.parse(a["credentials"])["node_id"]

json 标准里没有 symbol 类型,所以转成 json 时 key 就变成 string 了

#1 楼 @luikore 确实是用了 to_json,哈哈,大神果然是料事如神阿

#2 楼 @shlallen 我也犯过这样错所以才怀疑是...

需要 登录 后方可回复, 如果你还没有账号请 注册新账号