json对象按照ascii排序的算法

{
    "name": "zhangsan",
    "sex": "nan",
    "data": [{
        "bb":"2",
        "aa": "1"
    }, {
        "aa": "3",
        "bb": "4"
    }]
}

如何把上面的json对象(data为数组)按照ascii排序成下面的格式

data=[{bb=2, aa=1}, {aa=3, bb=4}]&name=zhangsan&sex=nan
{
    "name": "zhangsan",
    "sex": "nan",
    "data": {
        "bb":"2",
        "aa": "1"
    }
}

如何把上面的json对象(data为对象)按照ascii排序成下面的格式

data=aa=1&bb=2&name=zhangsan&sex=nan
阅读 3.9k
1 个回答
function sortA(o){
 var arr = sortB(o);
 for(var i=0,s='';i<arr.length;i++){
   var d = arr[i];
   if(o[d]&&typeof o[d]=='object')
        o[d] = sortB(o[d],1); 
   s+='&'+d+'='+o[d];
 }
  return s.slice(1);
}

function sortB(o,d){
  var a = [];
  for(var k in o) a.push(k);
  a = a.sort();
  if(d){
    if({}.toString.call(o)=='[object Object]'){
     for(var i=0,s='';i<a.length;i++)
      s+='&'+a[i]+'='+JSON.stringify(o[a[i]]); 
     return s.slice(1);
    }
    return JSON.stringify(o).replace(/:/g,'=');
  }
  return a;
 }
sortA(obj);

优化一下用递归解决

function sortAsc(o){
  var n = [];
  for(var k in o) n.push(k);
  n.sort();
  for(var i=0,str='';i<n.length;i++){
    var v = o[n[i]];
    if(v){
      if({}.toString.call(v)=='[object Object]')
        v = sortAsc(v);
      else if({}.toString.call(v)=='[object Array]')
        v = JSON.stringify(v).replace(/:/g,'=');
    }
    str+='&'+n[i]+'='+v;
  }
  return str.slice(1);
}
sortAsc(obj1);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题