1

我正在尝试将 Rails 记录转换为完全 Javascript 可遍历的 JSON 对象。我可以将基本记录转换为 JSON 就好了,我可以将每个单独的属性转换为 JSON 就好了。但是,我没有将整个对象转换为可遍历的 JSON 对象的好方法。理想情况下,该解决方案不涉及迭代每个属性并将值转换为 JSON。如何将我的整个记录​​完全转换为可以在 Javascript 中完全遍历的 JSON 格式?

以下是您需要采取的步骤来复制我的问题。提前致谢。

# 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
4

1 回答 1

1

The problem is the value of has_hash_value. It's a string (wrapped in "s). This is what I did:

your_hash = { has_hash_value: { one: { two: { three: "content"} } }.to_json }
your_hash[:has_hash_value] = JSON.parse(your_hash[:has_hash_value]

Your hash will then have the value:

{:has_hash_value=>{"one"=>{"two"=>{"three"=>"content"}}}}

I strongly suggest moving all of this code to the model and overwriting the #to_json method.

于 2015-02-13T16:34:08.610 回答