0

我有这样的序列化数组

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

现在我需要将此数组更改为 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());
4

3 回答 3

2

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

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

演示

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

于 2015-04-27T14:36:26.327 回答
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>

于 2015-04-27T14:33:59.480 回答
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);
于 2015-04-27T14:35:01.607 回答