将活动记录对象和字符串属性转换为JSON

时间:2015-02-13 16:29:06

标签: mysql json ruby-on-rails-4 activerecord ruby-2.2

我正在尝试将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

1 个答案:

答案 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方法。