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

如何在Sinatra的GET请求中更简洁地传递数组参数?

在Sinatra中用逗号分隔字符串传递数组参数的实现方案

Sinatra默认仅支持通过重复的param1[]=value格式(比如param1[]=1&param1[]=2)解析查询字符串中的数组参数,直接传param1[]=1,2,3的话,值会被当成单个字符串处理。不过你可以通过全局参数预处理实现自动解析逗号分隔的数组,不用在每个路由里手动拆分字符串。

方法:用before钩子全局处理参数

在Sinatra应用中添加一个before钩子,自动识别带[]后缀的参数,并将其中的逗号分隔字符串转换为数组:

require 'sinatra'
require 'json'

before do
  params.each do |key, value|
    # 仅处理带[]后缀且值为逗号分隔字符串的参数
    if key.end_with?('[]') && value.is_a?(String) && value.include?(',')
      # 将逗号分隔的字符串拆分为数组
      params[key] = value.split(',')
      # 可选:将参数名转为不带[]的格式,方便后续调用
      clean_key = key.chomp('[]')
      params[clean_key] = params[key]
      params.delete(key)
    end
  end
end

get '/my/test' do
  content_type :json
  # 直接使用params[:param1]就能拿到数组
  { received_param1: params[:param1] }.to_json
end

测试你的curl命令

现在你可以直接用简洁格式发起请求:

curl -v -H 'ContentType: application/json' -H 'Accept: application/json' 'http://0.0.0.0:8848/my/test?param1[]=1,2,3'

响应会返回:

{"received_param1":["1","2","3"]}

如果需要将数组元素转为整数,可在拆分后添加类型转换:

params[key] = value.split(',').map(&:to_i)

这样就能完全满足你无需手动拆分字符串,直接用逗号分隔格式传递数组的需求。

内容的提问来源于stack exchange,提问作者Tarta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:39:06