gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:03:56 25 4
gpt4 key购买 nike

我有两个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com