使用Jbuilder构建嵌套JSON对象出错,如何生成目标结构?
Jbuilder 生成嵌套JSON结构错误分析与修复
嘿,我来帮你捋清楚问题出在哪!你想要生成的是包含status和嵌套response.user的JSON结构,但你的Jbuilder代码有两个关键问题,导致输出完全不符合预期:
错误点1:缺少response嵌套层级
你直接写了json.user,但目标结构里user是被包裹在response对象里的,这就导致生成的JSON里根本没有正确的response节点,反而把属性都混在一起了。
错误点2:属性提取的语法用错了
json.(@user, :id, :name, :city)这个写法的作用是把@user的指定属性直接作为当前节点的键值对,同时还会把user设成一个包含属性名的数组(这就是你输出里出现"user":["id","name","city"]的原因),而不是把这些属性放到user对象内部。
正确的Jbuilder代码写法
这里有两种简洁的写法都能实现你的需求:
写法1:使用块结构明确层级
json.status 200 json.response do json.user do json.extract! @user, :id, :name, :city end end
写法2:更简洁的直接传参方式
json.status 200 json.response do json.user @user, :id, :name, :city end
最终生成的JSON
这两种写法都会输出你期望的结构:
{ "status": 200, "response": { "user": { "id": 1, "name": "Bob", "city": "New York" } } }
内容的提问来源于stack exchange,提问作者Daniel Viglione
相关产品推荐
相关产品推荐

