【发布时间】:2015-01-29 16:02:04
【问题描述】:
我有这个 JSON,我正在尝试将它从 Postman 发送到 Rails API:
{"object":
{
"type": "out",
"vars":
{
"x": "x",
"y": "y"
},
"values":
{
"ts": "timestamp",
"ok":
{
"total": 2,
"min": "x",
"max": "y"
},
"error":
{
"total": 2,
"error1": "first",
"error2": "second"
}
}
}
}
我需要在我的模型中将其转换为Hash,以便我可以使用before_create 对其进行操作。这是我带来的:
object = self.to_json # => converts object to json
object = JSON.parse(object) # => converts json to hash
第一个问题:我明白了(id=>nil 不相关,因为它会自动插入到数据库中):
{"id"=>nil, "type"=>"out", "vars"=>{"x"=>"x", "y"=>"y"}, "values"=>{"ts"=>"timestamp", "ok"=>"{\"total\"=>2, \"min\"=>\"x\", \"max\"=>\"y\"}", "error"=>"{\"total\"=>2, \"error1\"=>\"first\", \"error2\"=>\"second\"}"}, "created_at"=>"2015-01-29T15:45:01.329Z", "updated_at"=>"2015-01-29T15:45:01.329Z"}
当我尝试操纵 object["values"]["ok"] 时,Rails 发送错误:
unexpected token at '"{\"total\"=\u003e2, \"min\"=\u003e\"x\", \"max\"=\u003e\"y\"}"'
第二个问题:我只能调用object["values"],我想用符号调用它,而不是字符串object[:values]。
【问题讨论】:
-
第二个问题 =>
JSON.parse(object).with_indifferent_access -
感谢@apneadiving 解决了它。希望也能解决我的第一个问题:)
-
为什么要转换成 JSON 再转换回来?
-
为什么不直接调用
as_json,它会在编码之前为您提供哈希值? -
这一直有效。我用
object = self.as_json.with_indifferent_access。问题是当我到达object[:values][:ok].is_a? Hash时这是错误的,尽管它的打印方式类似于{"total"=>2, "min"=>"x", "max"=>"y"}
标签: ruby-on-rails ruby json hash