You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby看板开发:JSON格式双重括号问题求助

解决Ruby生成JSON时的双重括号问题

嗨,我来帮你搞定这个问题!你遇到的双重括号问题,根源就在这行代码:res << [big]。

咱们拆解下:big是通过pluck返回的一维数组(比如[1,2,3]),你把它再用[]包起来变成[[1,2,3]],然后推到空数组res里,最后转JSON自然就会出现外层多一层括号的情况啦。

修正方案

首先咱们先优化重复查询的问题(你原来的代码执行了两次完全相同的数据库查询,没必要),再解决括号问题:

elsif (params[:which] == "BigSize")
  # 只执行一次数据库查询,节省资源
  big = PrintType.where("width > 70")
                 .where("width <= 120")
                 .where("height > 118.9")
                 .where("height <= 150")
                 .pluck('DISTINCT artwork_id')
  # 直接用big作为返回的数组,不需要额外套res数组
  render :json => big.to_json(include: { :images => { :except => :img_orig } })

如果你的业务逻辑确实需要保留res数组(比如之后还要往里面加其他数据),那只需要把res << [big]改成res = big或者res.concat(big),避免给big再套一层数组:

elsif (params[:which] == "BigSize")
  res = []
  big = PrintType.where("width > 70")
                 .where("width <= 120")
                 .where("height > 118.9")
                 .where("height <= 150")
                 .pluck('DISTINCT artwork_id')
  # 直接把big的元素合并到res,或者直接赋值
  res.concat(big)
  # 或者 res = big
  render :json => res.to_json(include: { :images => { :except => :img_orig } })

为什么这样改?

  1. 去掉双重括号:big本身就是一维数组,直接转JSON会生成[1,2,3,...]的格式,不会有额外的外层括号。
  2. 性能优化:原来的代码重复执行了两次相同的数据库查询,现在只查一次,减少不必要的数据库交互。

这样调整后,生成的JSON就会是你想要的单括号格式啦!

内容的提问来源于stack exchange,提问作者S.B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:01:31