我正在尝试将Rails记录转换为完全Javascript可遍历的JSON对象。我可以将基本记录转换为JSON就好了,我可以将每个单独的属性转换为JSON就好了。但是,我没有很好的方法将整个对象转换为可遍历的JSON对象。理想情况下,解决方案不涉及迭代每个属性并将值转换为JSON。如何将我的整个记录完全转换为JSON格式,我可以在Javascript中完全遍历?
以下是复制问题所需采取的步骤。提前谢谢。
# database
MySQL, and the column is a Rails text data type.
# seeds.rb
ModelName.create(
has_hash_value: { one: { two: { three: "content"} } }
)
# console
$ rake db:seed
# controller
@resource = ModelName.first.to_json
# erb view
<div id="data" data-json="<$= @resource %>"></div>
# generated HTML
{"has_hash_value":"{:one=\u003e{:two=\u003e{:three=\u003e\"content\"}}}",
# javascript
window.data = $('#data').data().json
# browser console
> data.has_hash_value
< "{:one=>{:two=>{:three=>"content"}}}"
> data.has_hash_value.one
< undefined
更新
我尝试了@resource = JSON.parse(ModelName.first.to_json)
,但返回的是一个完全不可逆转的字符串。但是,嵌套的哈希格式更好。
# controller
@resource = JSON.parse(ModelName.first.to_json)
# generated HTML
data-json="{"has_hash_value"=>"{:one=>{:two=>{:three=>\"content\"}}}"
# browser console
> data.has_hash_value
< undefined
更新2
当我使用格式化为字符串或json的数据播种,并在控制器中转换为哈希然后转换为JSON时,生成的HTML和JS响应更清晰,但我仍然无法完全遍历。
# seeds.rb
has_hash_value: { one: { two: { three: "content"} } }.to_json
# controller
@resource = TourAnalytic.first.as_json.to_json
# generated HTML
data-json="{"has_hash_value":"{\"one\":{\"two\":{\"three\":\"content\"}}}"
# browser console
> data.has_hash_value
< Object {has_hash_value: "{"one":{"two":{"three":"content"}}}"}
> data.has_hash_value.one
< undefined
答案 0 :(得分:1)
问题是has_hash_value
的价值。它是一个字符串(包含在&#34; s中)。这就是我所做的:
your_hash = { has_hash_value: { one: { two: { three: "content"} } }.to_json }
your_hash[:has_hash_value] = JSON.parse(your_hash[:has_hash_value]
您的哈希值将具有以下值:
{:has_hash_value=>{"one"=>{"two"=>{"three"=>"content"}}}}
我强烈建议将所有代码移至模型并覆盖#to_json
方法。