如何在javascript中将序列化数组值转换为JSON

时间:2015-04-27 14:29:47

标签: javascript arrays json serialization serializearray

我有这样的序列化数组

rate_3=26&rate_8=67&rate_12=98等..,

现在我需要将此数组更改为json类型

    {
        "ID": "3",
        "Rate": "26"
    },
    {
        "ID": "8",
        "Rate": "67"
    },
    {
        "ID": "3",
        "Rate": "26"
   } .., 
   etc

所以我尝试了这样但它不起作用...请有人帮助我。

        var o = {};
        var a = table.$('input, select').serialize();
        $.each(a, function() 
        {
        if (o[this.name] !== undefined) 
            {
            if (!o[this.name].push) 
                {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            }
        else 
            {
                o[this.name] = this.value || '';
            }
        });
        return o;

我正在使用数据表,所以我只需要为使用此行的数据获取Datatables序列化数组

var a = table.$('input, select').serialize();

即使我也尝试过json2.js,但是当我使用json2.js时强迫页面提交

var data_2 = JSON.stringify(block_form.serializeArray());

3 个答案:

答案 0 :(得分:2)

简单方法是map对正则表达式匹配的结果,将新对象推送到结果数组中:

var out = str.match(/\d+=\d+/g).map(function (el) {
    var arr = el.split('=');
    return { id: arr[0], rate: arr[1] };
});

DEMO

使用JSON.stringify(out)将输出数组转换为JSON。

答案 1 :(得分:1)

如果您的数据格式可靠地采用rate_N=X&格式,则可以使用简单的字符串拆分来解析值。这似乎与查询字符串的格式类似,如果是这种情况,您不应该遇到(m)任何不寻常的实体。

首先,您需要将每个键值对分开(在&上)。然后在=上拆分每一对以生成密钥和值。你需要从密钥中解析出来的ID(从前面切掉rate_),哪个substr适合。

var data = "rate_3=26&rate_8=67&rate_12=98";

var pairs = data.split('&').reduce(function(collect, pair) {
  var kv = pair.split('=');
  var name = kv[0].substr(kv[0].indexOf('_') + 1);
  collect.push({
    id: name,
    rate: kv[1]
  });
  return collect;
}, []);

document.getElementById('results').textContent = JSON.stringify(pairs);
<pre id="results"></pre>

答案 2 :(得分:0)

http://jsfiddle.net/43hnftaf/

var str = 'rate_3=26&rate_8=67&rate_12=98'
var arr = str.split('&').map(function(element) { 
    return element.replace(/^rate_/, '');
}).map(function(element) {
    var elements = element.split('=');
    return {
        "ID" : elements[0],
        "Rate" : elements[1]
    };
});
console.log(arr);