javascript - 查询参数键中的方括号
问题描述
我需要从使用方括号作为参数名称一部分的 API 获取数据。API不是我写的,所以不要拍信使!
编辑:我应该注意到,这段代码将在节点(服务器端)上运行,而不是在浏览器中。
我在 Javascript 中使用 Axios,这是我的 axios 调用:
axios.get(url, {params: {queryParams}})
.then(res => {
brands = res.data;
console.log(res.data);
})
.catch(error => {
console.log( '\n\n\n\n')
console.log(error);
});
参数如下。为简洁起见,我展示了我尝试过的三种不同格式(直接字符、转义和 ASCII 编码),但在每次尝试中,我都以相同的格式传递了三个参数。
Set the query parameters
let queryParams = {
"tables": table,
"manifest": manifest,
"where[0][0]": field,
"where%5B0%5D%5B1%5D": "%3D",
"where\\[0\\]\\[2\\]": searchValue,
"ordery_by": "id%2C%20ASC",
"limit": "100",
"app": "json",
'client_key': authkey
}
在所有情况下,axios 似乎都将参数转换为 javascript Web 令牌。
另一方面,如果我将参数作为字符串连接到 URL,则请求有效,并且我得到了我期望的数据。
let fullPath = url.concat(
"?tables=", table,
"&manifest=", manifest,
"&where%5B0%5D%5B0%5D=", field,
"&where%5B0%5D%5B1%5D=", "%3D",
"&where%5B0%5D%5B2%5D=", searchValue,
"&ordery_by=", "id%2C%20ASC",
"&limit=", "100",
"&app=", "json",
"&client_key=", authkey
)
虽然我有一个解决方案(如上所示),但有没有办法使用适当的参数对象来做到这一点?
解决方案
如果您在浏览器中执行此操作,则可以使用URLSearchParams()来迭代人类可读的对象并让它创建查询字符串。
Node 也有一个类似的模块
axios 还支持将 URLSearchParams对象作为 params 参数传递
let queryParams = {
"tables": 1,
"manifest": 2,
"where[0][0]": 3,
"where[0][1]": "=",
"where[0][2]": 4,
"ordery_by": "id,ASC",
"limit": "100",
"app": "json",
'client_key': 'abc'
}
const sParams = new URLSearchParams(Object.entries(queryParams));
console.log('query string')
console.log(sParams.toString())
console.log('sParam entries')
console.log(JSON.stringify([...sParams]))
.as-console-wrapper { max-height: 100%!important;top:0;}
更进一步,您可以使用 URL 构造函数构造完整的 url
const url = new URL('https://myApi.com')
url.search = new URLSearchParams(Object.entries(queryParams));
console.log(url.href)
推荐阅读
- javascript - Node.js / javascript minhash 模块,为相似的文本输出相似的哈希字符串
- python - Python:为什么在scrapy crawlspider中没有打印或做任何事情?
- sql - SQL 获取本年度直到前一周星期五的数据
- docker - 启动失败,ddev-router 无法准备好,复制上游
- python - 来自同一模型的 Django 两个 ForeignKey
- python - 在 QStackedWidget 对象内定位内部小部件
- sqlite - 为矩阵创建sql表并将csv文件插入表中
- github - 如何在 Github 上更新拉取请求
- javascript - Sequelize:使用函数添加默认范围
- security - 如何允许具有内容安全策略 (CSP) 的 iframe