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

Axios发送GET请求传递二维数组时Express端如何正确解析?

问题根因

你遇到的参数格式异常是因为axios默认序列化GET请求参数时,会将二维数组的内层元素直接转为JSON字符串后拼接在URL参数中,因此服务端拿到的外层是数组,每个元素都是内层数组的JSON字符串格式。

方案1:仅服务端做解析(改造成本最低)

直接对拿到的salaries数组每一项做JSON解析即可,建议加异常捕获避免非法参数报错:

// Node.js 服务端示例代码
let parsedSalaries = []
try {
  parsedSalaries = req.query.salaries.map(item => {
    const range = JSON.parse(item)
    // 如果需要数值类型可以直接转,不需要的话可以去掉map(Number)
    return range.map(Number)
  })
} catch (err) {
  // 此处可加参数非法的错误处理逻辑,比如返回参数错误响应
  throw new Error('salaries参数格式错误')
}

方案2:前后端配合从根源解决(更规范,后续维护成本低)

可以在前端axios请求时配置参数序列化规则,让二维数组按标准格式传递,服务端可以直接拿到正确格式的二维数组,不需要额外解析:
给axios配置paramsSerializer,使用qs库(axios已内置依赖,无需额外安装)序列化参数:

import qs from 'qs'

axios.get('https://example.org/getJobs', {
  params: { salaries, /* 其他参数 */ },
  // 配置序列化规则,二维数组会被正确序列化为可被服务端直接解析的格式
  paramsSerializer: (params) => qs.stringify(params, { arrayFormat: 'indices' })
})

如果用的是Node.js的express/koa框架,服务端不需要做任何额外处理,req.query.salaries就会是原始的二维数组格式。

备选方案:整体序列化传递

如果参数结构更复杂,也可以直接把salaries整体转成JSON字符串传递:

// 前端代码
axios.get('https://example.org/getJobs', {
  params: { 
    salaries: JSON.stringify(salaries),
    /* 其他参数 */
  }
})

// 服务端代码
const parsedSalaries = JSON.parse(req.query.salaries)

注意:如果salaries数组长度非常大,会导致URL过长触发浏览器/服务器的URL长度限制,这种场景建议改成POST请求传递参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:54:05