qs和query-string有什么区别?

两个模块都有parse和stringify方法啊,他们有什么区别呢?

阅读 20.6k
4 个回答

两个完全不同的模块...虽然经常有人是const fs=require("querystring")。然而它们没半毛钱关系

querystring(文档)是node的核心模块,主要用来自定义url的分隔符,大概像这样:

querystring.parse('a^4~f^6','~','^')
//{ a: '4', f: '6' }

qs模块需要通过npm安装,最早是由TJ大神编写的。它是A querystring parser with nesting support,即一个支持嵌套的查询字符串解析器,示例:

var expected = {
    a: {
        b: {
            c: {
                d: {
                    e: {
                        f: {
                            '[g][h][i]': 'j'
                        }
                    }
                }
            }
        }
    }
};
var string = 'a[b][c][d][e][f][g][h][i]=j';
assert.deepEqual(qs.parse(string), expected);

看上去有些奇葩,不过我看它昨天有738,087的下载量,估计有很多模块是依赖它的。

require('qs').parse(require('url').parse('https://xxx.com/xxx?from=xxx').search)
// { '?from': 'xxx' }
require('query-string').parse(require('url').parse('https://xxx.com/xxx?from=xxx').search)
// { from: 'xxx' }

简单来说就是qs可以转换任意类json格式的数据,而querystring只能转换平面数据结构,qs的功能更加强大
https://stackoverflow.com/que...

说说:其实,JSON、queryString、qs这三个库核心都是两个方法,对象转<==>字符串,字符串<===>对象....,都有stringifyparse两个方法


代码JSON:参考developer.mozilla JSON.parse

实例1,json实例
var json = '{"result":true, "count":42}';
const obj = JSON.parse(json);

console.log(obj.count);
// expected output: 42

console.log(obj.result);
// expected output: true

const jsonNewStr = JSON.stringify(obj);
console.log(jsonNewStr);
// expected output:{"result":true,"count":42}

代码实例见:
querystring中文版说明
querystring英文版说明

import { parse, stringify } from 'querystring';
//或者 const querystring = require('querystring');
var assert = require('assert');

var data =  querystring.parse('foo=bar&abc=xyz&abc=123');
返回对象形如:
-- {
--   foo: 'bar',
--   abc: ['xyz', '123']
-- }

querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' });
// 返回 'foo=bar&baz=qux&baz=quux&corge='

querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':');
// 返回 'foo:bar;baz:qux'

代码实例参见:npm qs
qs出来的迟,和querystring功能是一样的,感觉会更流行和强大.

实例2:qs实例
import qs from 'qs';
import assert from 'assert';
或者
// var qs = require('qs');
// var assert = require('assert');
 
var obj = qs.parse('a=c');
assert.deepEqual(obj, { a: 'c' });
 
var str = qs.stringify(obj);
assert.equal(str, 'a=c');

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

推荐问题
宣传栏