Is there any native function to convert json to url parameters?

后端 未结 11 1830
再見小時候
再見小時候 2020-11-29 22:00

I need convert json object to url form like: \"parameter=12&asd=1\"

I done with this:

        var data = {
            \'action\':\'actualiza_res         


        
11条回答
  •  有刺的猬
    2020-11-29 22:33

    I made an implementation that support nested objects and arrays i.e.

    var data = {
        users: [
        {
          "name": "jeff",
          "tasks": [
            "Do one thing",
            "Do second thing"
          ]
        },
        {
          "name": "rick",
          "tasks": [
            "Never gonna give you up",
            "Never gonna let you down"
          ]
        }
      ]
    }
    

    Will be:

    users[0][name]=jeff&users[0][tasks][0]=Do%20one%20thing&users[0][tasks][1]=Do%20second%20thing&users[1][name]=rick&users[1][tasks][0]=Never%20gonna%20give%20you%20up&users[1][tasks][1]=Never%20gonna%20let%20you%20down
    

    So, here's the implementation:

    var isObj = function(a) {
      if ((!!a) && (a.constructor === Object)) {
        return true;
      }
      return false;
    };
    var _st = function(z, g) {
      return "" + (g != "" ? "[" : "") + z + (g != "" ? "]" : "");
    };
    var fromObject = function(params, skipobjects, prefix) {
      if (skipobjects === void 0) {
        skipobjects = false;
      }
      if (prefix === void 0) {
        prefix = "";
      }
      var result = "";
      if (typeof(params) != "object") {
        return prefix + "=" + encodeURIComponent(params) + "&";
      }
      for (var param in params) {
        var c = "" + prefix + _st(param, prefix);
        if (isObj(params[param]) && !skipobjects) {
          result += fromObject(params[param], false, "" + c);
        } else if (Array.isArray(params[param]) && !skipobjects) {
          params[param].forEach(function(item, ind) {
            result += fromObject(item, false, c + "[" + ind + "]");
          });
        } else {
          result += c + "=" + encodeURIComponent(params[param]) + "&";
        }
      }
      return result;
    };
    
    var data = {
      users: [{
          "name": "jeff",
          "tasks": [
            "Do one thing",
            "Do second thing"
          ]
        },
        {
          "name": "rick",
          "tasks": [
            "Never gonna give you up",
            "Never gonna let you down"
          ]
        }
      ]
    }
    
    document.write(fromObject(data));

提交回复
热议问题