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 } })
为什么这样改?
- 去掉双重括号:
big本身就是一维数组,直接转JSON会生成[1,2,3,...]的格式,不会有额外的外层括号。 - 性能优化:原来的代码重复执行了两次相同的数据库查询,现在只查一次,减少不必要的数据库交互。
这样调整后,生成的JSON就会是你想要的单括号格式啦!
内容的提问来源于stack exchange,提问作者S.B
相关产品推荐
相关产品推荐

