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