JS中签名组串QueryString生成

/**
 * @param data json字符串字节流
 * @desc 用于生成签名拼接字符串QueryString。
 *      1.按ASCII码从小到大排序,空键/值和空字符串不参与组串
 *      2.统一使用UTF8进行编码签名,防止编码方式或特殊字符不兼容问题
 *      3.签名原始串中,字段名和字段值都采用原始值,即不进行URL Encode
 *      4.注意整形、浮点型数据参与签名方式(如:浮点数3.10体现为3.1、0.0体现为0)
 *      5.内嵌JSON或ARRAY解析拼接需转字符串且按紧凑方式,即内嵌各K/V或值之间不应有空格或换行符等等
 *      6.内部值中嵌套对象中空值或空字符串不做任何处理(即保留),空值统一使用null
 *      7.内部值中的嵌套对象键值属性保持原有顺序,不做特殊排序处理
 */
function buildSignQueryString(params) {
  var keys = Object.keys(params).sort()
  var queryString = "";
  keys.forEach((key,index) => {
    var val = params[key];
    if (key == undefined || key ==null || key.length == 0 || val == undefined || val==null || val.length == 0) {
      return
    }
    if (queryString.length > 0) {
      queryString += "&"
    }
    queryString += key + "="
    switch(typeof(val)) {
        case "object": queryString += JSON.stringify(val,(k,v)=>typeof v==='undefined'?null:v);break;
        default: queryString += val;break;
    }
  })
  return queryString;
}

验证JS参数对象

var params = {
	"d":"中华人民共和国",
	"b":2.12345678,
	"a":1,
	"e":[
		1,
		2.12345678,
		true,
		"中华人民共和国",
		{
			"e4":"中化人民共和国",
			"e2":2.12345678,
			"e3":true,
			"e1":1,
			"e5":[],
			"e6":undefined
		},
		undefined
	],
	"c":true,
	"f":{
		"f4":"中化人民共和国",
		"f2":2.12345678,
		"f3":true,
		"f1":1,
		"f6":undefined,
		"f5":{
			"f5_1":1,
			"f5_2":2.12345678,
			"f5_3":true,
			"f5_5":[],
			"f5_6":undefined,
			"f5_4":"中化人民共和国"
		}
	}
}

验证输出:

console.log(buildSignQueryString(params))
输出结果如下:
a=1&b=2.12345678&c=true&d=中华人民共和国&e=[1,2.12345678,true,"中华人民共和国",{"e4":"中化人民共和国","e2":2.12345678,"e3":true,"e1":1,"e5":[],"e6":null},null]&f={"f4":"中化人民共和国","f2":2.12345678,"f3":true,"f1":1,"f6":null,"f5":{"f5_1":1,"f5_2":2.12345678,"f5_3":true,"f5_5":[],"f5_6":null,"f5_4":"中化人民共和国"}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值