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

How to convert serialize array value to JSON in javascript

我有这样的序列化数组

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;

我正在使用数据表,所以我只需要为使用这一行的数据表序列化数组

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

即使我也尝试使用 json2.js 但是当我使用 json2.js 时它会强制页面提交

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

如果您的数据格式可靠地采用 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>

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);

简单的方法是 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