Ruby API转JSON时如何去除响应中的反斜杠?
解决Ruby API返回JSON带反斜杠的问题
你的问题根源是双重JSON序列化:
当你调用render json: response.to_json时,Rails的render :json方法本身会自动将传入的对象序列化为JSON格式。而你提前用to_json把ActiveRecord集合转成了JSON字符串,render方法会把这个字符串当作普通字符串再转一次JSON,导致字符串里的双引号被转义成\",也就是你看到的反斜杠。
直接解决方案
修改代码,去掉手动调用的to_json,直接把ActiveRecord集合传给render json::
def get_data response = data.select(:xx, :xxx, :xxx, :xxx).where(id: xxx1, xx1: xx1) if response.empty? respond_to do |format| msg = { message: "No records found" } format.json { render json: msg } end else respond_to do |format| # 直接传入ActiveRecord集合,让render自动处理序列化 format.json { render json: response } end end end
自定义JSON结构的处理方式
如果需要自定义返回的JSON字段(比如添加额外属性、排除默认字段),可以用as_json生成Ruby哈希,再传给render json:——as_json返回的是Ruby对象,不会触发双重序列化:
format.json { render json: response.as_json( only: [:xx, :xxx], # 指定只返回这些字段 methods: [:custom_method] # 额外添加模型中自定义方法的返回值 ) }
验证
修改代码后用Postman重新发起请求,检查响应的JSON结构,反斜杠应该会消失。如果问题依然存在,排查是否有全局中间件或自定义序列化器(比如ActiveModel::Serializer)在额外处理JSON输出。
内容的提问来源于stack exchange,提问作者arj
相关产品推荐
相关产品推荐

