qs.stringify() 和JSON.stringify()有什么区别,什么情况下用哪一个

我看很多项目中,有人用了qs库 我不知道既然有JSON的方法将数据切换格式,为什么还要安装qs

阅读 19.4k
3 个回答

完全不是一个东西,功能虽然都是序列化。假设我要提交的数据如下
var a = {name:'hehe',age:10};
qs.stringify序列化结果如下

name=hehe&age=10

而JSON.stringify序列化结果如下:

"{"a":"hehe","age":10}"

qs库支持的类型和方法更多吧,如文档中所写的那样转化不符合json格式的字符串,例如'foo[bar][baz]=foobarbaz')
对于stringify,qs库的输出也是不一样的,如上一条那样的格式。
如果你并没有这种需求,并且你的JSON是正常类型的JSON,还是用JSON好了。
附上npm:qs

我还自己写了一个吧,对象转成name=hehe&age=10格式的,原来qs.stringify()就可以使用
补充说明:
qs.stringify把js对象转成key=value连接形式的字符串,类似:json.stringify,如:{name:'hehe', ange:10}==>name=hehe&ange=10
qs.parse则是相反操作,把key=value连接字符串转成对象,类似:json.parse,如:
name=hehe&ange=10==>{name:'hehe', ange:10}

/**
 * 把 json 串 转换成 key=value连接的形式
 * @param params, 是json 对象 eg:var props = { "username": 'zhangsan', age: 14, sex: '男', height: 189 };
 * @returns {string} eg:username=zhangsan&age=14&sex=男&height=189
 *
 * @author 杨海林
 */
function keyValueStringify(params) {
  let newParams = params;
  if (typeof params === 'string') {
    newParams = JSON.parse(params);
  }
  const paramsArray = [];
  // 拼接参数
  Object.keys(newParams).forEach(key =>
    paramsArray.push(`${key}=${encodeURIComponent(newParams[key])}`)
  );
  return paramsArray.join('&');
}

应该,把
qs和query-string和json三个放到一块对吧
共同点:都是有 parse和stringify方法,都是对象和字符串的互转(url字符串或者json字符
串)
区别1:qs是querystring升级版本,更流程和强大,都是 对象《===》keyvalue字符串
区别2:qs(querstring)和json, 一个字符串是json传,一个是key=value&形式的字符串; 当然=和&也可以替换成其他的自定义的字符串
可以参见:qs和query-string有什么区别?

推荐问题
宣传栏