【问题标题】:Convert Active Record Object and String Attributes to JSON将 Active Record 对象和字符串属性转换为 JSON
【发布时间】:2015-04-14 18:23:48
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    问题在于has_hash_value 的值。这是一个字符串(用 "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=&gt;{"one"=&gt;{"two"=&gt;{"three"=&gt;"content"}}}}

    强烈建议将所有这些代码移至模型并覆盖#to_json 方法。

    【讨论】:

    • 这可能一次只适用于一个属性,但我已经可以将每个属性单独转换为 JSON,并且我有 20 个左右的属性需要每条记录进行转换。我希望有一种方法可以更简单地完整解析 ActiveRecord 对象。
    猜你喜欢
    • 2020-01-30
    • 1970-01-01
    • 2019-08-27
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2012-06-14
    相关资源
    最近更新 更多