qs
是一个流行的 JavaScript 库,用于解析和序列化 URL 查询字符串。它提供了比原生的 URLSearchParams
更丰富的功能和更大的灵活性,特别是在处理嵌套对象和数组时。
安装
你可以使用 npm 或 yarn 安装 qs
:
npm install qs
# 或者
yarn add qs
使用示例
解析查询字符串
qs.parse
方法用于将查询字符串解析为对象。
import qs from 'qs';
const queryString = 'name=Alice&age=30&hobbies=reading&hobbies=traveling';
const parsed = qs.parse(queryString);
console.log(parsed);
// 输出: { name: 'Alice', age: '30', hobbies: ['reading', 'traveling'] }
序列化对象
qs.stringify
方法用于将对象序列化为查询字符串。
import qs from 'qs';
const obj = {
name: 'Alice',
age: 30,
hobbies: ['reading', 'traveling']
};
const queryString = qs.stringify(obj);
console.log(queryString);
// 输出: 'name=Alice&age=30&hobbies=reading&hobbies=traveling'
处理嵌套对象
qs
可以处理嵌套对象,这在处理复杂的查询字符串时非常有用。
import qs from 'qs';
const queryString = 'user[name]=Alice&user[age]=30&user[hobbies]=reading&user[hobbies]=traveling';
const parsed = qs.parse(queryString);
console.log(parsed);
// 输出: { user: { name: 'Alice', age: '30', hobbies: ['reading', 'traveling'] } }
序列化嵌套对象
同样,qs
也可以将嵌套对象序列化为查询字符串。
import qs from 'qs';
const obj = {
user: {
name: 'Alice',
age: 30,
hobbies: ['reading', 'traveling']
}
};
const queryString = qs.stringify(obj);
console.log(queryString);
// 输出: 'user[name]=Alice&user[age]=30&user[hobbies]=reading&user[hobbies=traveling'
配置选项
qs
提供了多种配置选项,使你可以根据需要自定义解析和序列化的行为。
解析选项
qs.parse
的常用选项包括:ignoreQueryPrefix
: 是否忽略查询字符串前缀(通常是?
)。delimiter
: 指定分隔符(默认为&
)。depth
: 指定解析嵌套对象的最大深度(默认为 5)。
const queryString = '?name=Alice&age=30';
const parsed = qs.parse(queryString, { ignoreQueryPrefix: true });
console.log(parsed);
// 输出: { name: 'Alice', age: '30' }
序列化选项
qs.stringify
的常用选项包括:addQueryPrefix
: 是否添加查询字符串前缀(通常是?
)。arrayFormat
: 指定数组的序列化格式(如indices
,brackets
,repeat
,comma
)。delimiter
: 指定分隔符(默认为&
)。
const obj = { name: 'Alice', age: 30 };
const queryString = qs.stringify(obj, { addQueryPrefix: true });
console.log(queryString);
// 输出: '?name=Alice&age=30'
总结
qs
是一个强大的工具,用于解析和序列化查询字符串,特别是在处理复杂的嵌套对象和数组时。通过使用 qs
,你可以轻松地将 URL 查询字符串与 JavaScript 对象之间进行转换,提高代码的可读性和可维护性。