How to convert an x-www-form-urlencoded string to JSON?

后端 未结 8 843
梦谈多话
梦谈多话 2020-12-05 02:34

Exampple of application/x-www-form-urlencoded string

CorrelationId=1&PickedNumbers%5B%5D=1&PickedNumbers%5B%5D=2&PickedNumbers%5B%5D=3&Picked         


        
相关标签:
8条回答
  • 2020-12-05 03:33

    the following code should do the trick:

    var str = 'CorrelationId=1&PickedNumbers%5B%5D=1&PickedNumbers%5B%5D=2&PickedNumbers%5B%5D=3&PickedNumbers%5B%5D=4';
    var keyValuePairs = str.split('&');
    var json = {};
    for(var i=0,len = keyValuePairs.length,tmp,key,value;i <len;i++) {
        tmp = keyValuePairs[i].split('=');
        key = decodeURIComponent(tmp[0]);
        value = decodeURIComponent(tmp[1]);
        if(key.search(/\[\]$/) != -1) {
            tmp = key.replace(/\[\]$/,'');
            json[tmp] = json[tmp] || [];
            json[tmp].push(value);
        }
        else {
            json[key] = value;
        }
    }
    
    0 讨论(0)
  • 2020-12-05 03:33

    Here's a pure-JavaScript way to do it. JavaScript frameworks might also help you out with this. EDIT: Just for kicks, I threw in dictionary parsing, too. See the 2nd example.

    function decodeFormParams(params) {
      var pairs = params.split('&'),
          result = {};
    
      for (var i = 0; i < pairs.length; i++) {
        var pair = pairs[i].split('='),
            key = decodeURIComponent(pair[0]),
            value = decodeURIComponent(pair[1]),
            isArray = /\[\]$/.test(key),
            dictMatch = key.match(/^(.+)\[([^\]]+)\]$/);
    
        if (dictMatch) {
          key = dictMatch[1];
          var subkey = dictMatch[2];
    
          result[key] = result[key] || {};
          result[key][subkey] = value;
        } else if (isArray) {
          key = key.substring(0, key.length-2);
          result[key] = result[key] || [];
          result[key].push(value);
        } else {
          result[key] = value;
        }
      }
    
      return result;
    }
    
    decodeFormParams("CorrelationId=1&PickedNumbers%5B%5D=1&PickedNumbers%5B%5D=2&PickedNumbers%5B%5D=3&PickedNumbers%5B%5D=4");
    // => {"CorrelationId":"1","PickedNumbers":["1","2","3","4"]}
    
    decodeFormParams("a%5Bb%5D=c&a%5Bd%5D=e");
    // => {"a":{"b":"c","d":"e"}}
    
    0 讨论(0)
提交回复
热议问题