node.js的querystring.stringify的使用

node.js的querystring.stringify的使用

  1. 该方法可以将对象转换为字符串,字符串中多个参数用‘&’分割,键与值用”=”赋值

    注意与 querystring.parse()区别,后者是将字符串转换为对象


  2. querystring.stringify(obj, [sep], [eq])

    obj:欲转换的对象

    sep:设置分隔符,默认为‘&’

    eq :设置赋值符,默认为‘=’

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

  3. 下面的函数是我写的一个简单的stringify

        function stringify(obj, sep, eq) {
            sep = sep || '&';
            eq = eq || '=';
            var tmp = [];
            var res = [];
            for(var item in obj) {
                if(Array.isArray(obj[item])) {
                    obj[item].forEach(function(value) {
                        tmp.push(item, value);
                        res.push(tmp.join(eq));
                        tmp.length = 0;                     
                    });             
                }else {
                    tmp.push(item, obj[item]);
                    res.push(tmp.join(eq)); 
                    tmp.length = 0;         
                }
    
    
            }
            res.join(sep);
            console.log(res.join(sep));
        }
    
        stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' });
    
        stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' });
        //结果: foo=bar&baz=qux&baz=quux&corge=

  4. 关于querystring.stringify的源码

    QueryString.stringify = QueryString.encode = function(obj, sep, eq, name) {
     sep = sep || '&';
     eq = eq || '=';
     if (util.isNull(obj)) {
       obj = undefined;
     }
     if (util.isObject(obj)) {
       return Object.keys(obj).map(function(k) {
         var ks = QueryString.escape(stringifyPrimitive(k)) + eq;
         if (util.isArray(obj[k])) {
           return obj[k].map(function(v) {
             return ks + QueryString.escape(stringifyPrimitive(v));
           }).join(sep);
         } else {
           return ks + QueryString.escape(stringifyPrimitive(obj[k]));
         }
       }).join(sep);
     }
     if (!name) return '';
     return QueryString.escape(stringifyPrimitive(name)) + eq +
            QueryString.escape(stringifyPrimitive(obj));
    };

关于这部分源码,有兴趣的童鞋可以一起讨论哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值