【问题标题】:Reducing the depth of a Hash object减少 Hash 对象的深度
【发布时间】:2011-03-06 22:57:08
【问题描述】:

我有一个来自 ActiveRecord 的哈希对象。我将在上面调用to_json,但我希望减少返回的对象的深度。这是我的发现的样子:

@tags = Tag.find_all_by_type("some_type", :select => :name)

@tags.to_json 的结果如下所示:

[{"tag": {"name": "some tag name"}},
 {"tag": {"name": "another tag name"}},
 {"tag": {"name": "etc..."}}]

但是,我希望结果看起来像这样,因为我不需要将每个对象都包装在 tag 对象中:

[{"name": "some tag name"}, {"name": "another tag name"}, {"name": "etc..."}]

我有没有办法通过mapcollect 或类似的电话来做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby hash map hashmap


    【解决方案1】:

    如果您将变量ActiveRecord::Base.include_root_in_json 设置为false,您将获得您正在寻找的行为。

    Reference

    【讨论】:

    • 谢谢,成功了。虽然这可能不是正确的做法,但我在需要发生这种情况的特定视图中设置了值。我不想对项目中的任何其他调用产生负面影响,因为其他人可能会期望 JSON 中的根。
    • 确实如此。完成非根 JSON 后,我建议将其更改回默认值“true”。
    • Tag.include_root_in_json = false # 减少其他代码混乱的可能性。我真的很奇怪为什么他们不让你在传递给 #to_json 方法的选项哈希中指定这个。
    • 很高兴找到 Lars,这绝对是一个比设置全局更好的主意。而且,这似乎应该是一个选择。
    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2016-03-12
    • 2020-06-07
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    相关资源
    最近更新 更多