javascript - 来自 Rails Controller 的 JSON 自定义格式

标签 javascript ruby-on-rails json api

我有两个 rails 模型:

一个里程碑有很多任务 一个任务属于一个里程碑

在我的 Controller 中,我调用了以下内容:

@milestones = Milestone.all
render :json => @milestones.to_json(:include => :tasks)

这给了我:

[   {
    "id": 5,
    "name": "This is milestone #1",
    "tasks": [{
            "complete": false,
            "id": 60,
            "name": "aaaaa",
            "milestone_id": 5,
        }, {
            "complete": false,
            "id": 62,
            "name": "ccccc",
            "milestone_id": 5,
        }
    ]
}, {
    "id": 6,
    "name": "This is milestone #2",
    "tasks": [{
            "complete": false,
            "id": 65,
            "name": "ffffff",
            "milestone_id": 5,
        }, {
            "complete": false,
            "id": 66,
            "name": "gggggg",
            "milestone_id": 5,
        }
    ]
}

]

但我需要能够轻松浏览 JSON,所以我希望能够像这样格式化它(注意每个“子数组”都标有“milestone_ID”或“task_ID”):

[   
"milestone_5": {
    "id": 5,
    "name": "This is milestone #1",
    "tasks": [
        "task_60":{
            "complete": false,
            "id": 60,
            "name": "aaaaa",
            "milestone_id": 5,
        }, 
        "task_62":{
            "complete": false,
            "id": 62,
            "name": "ccccc",
            "milestone_id": 5,
        }
    ]
}, 

"milestone_6":{
    "id": 6,
    "name": "This is milestone #2",
    "tasks": [
        "task_65":{
            "complete": false,
            "id": 65,
            "name": "ffffff",
            "milestone_id": 5,
        }, 
        "task_66":{
            "complete": false,
            "id": 66,
            "name": "gggggg",
            "milestone_id": 5,
        }
    ]
}

]

有没有人知道如何让 Rails 变成自定义格式的 JSON。即使我必须丢掉“milestone_”部分而只是吐出 ID,这也会非常有帮助。

谢谢!

最佳答案

看看 json_builder gem 。

您的要求当然是可行的,但就个人而言,当您开始使用 Controller 的 json 输出做任何远程有用的事情时,默认的 to_json 方法会变得笨拙。最好明确输出您希望 json 看起来像什么。

特别是在您的 json_builder 文件中...

milestone.json.json_builder

@milestones.each do |milestone|
  key "milestone_#{milestone.id}" do
    id milestone.id
    name milestone.name
  end
end

等等等等。我相信这会成功。

编辑:对于消耗我的 json 的任何资源,我倾向于只包含我需要的模型中的确切字段。这将提高性能,并可以在出现问题时更容易调试。哪些字段将显示在何处也非常明显。

关于javascript - 来自 Rails Controller 的 JSON 自定义格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16367652/

相关文章:

javascript - 动态创建 div 并将数组中的值应用到它们

ruby-on-rails - 从 Rails 模型渲染部分时访问 URL 助手

java - 检查器显示 3 秒更新,如何获取新值?

php - 使用 JSON 将表单数据从 Phonegap 传递到 PHP

javascript - 使用javascript从json对象获取 parent 姓名

javascript - 具有大型几何图形的 couchbase 空间查询

javascript - JavaScript 的非贪婪正则表达式

javascript - HTML 表 : Edit button trigger Javascript event

ruby-on-rails - Docker Nginx反向代理返回502错误的网关 “connection refused while connecting to upstream”

mysql - 如何在 Rails 中使用自定义 mysql 列类型 - varbinary(16)