2015-04-27 18 views
0

我有序列化数组这样如何序列化数组值转换成JSON在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()); 
+2

'this but its not working' - 实际发生了什么,实际上会发生什么? – thefourtheye

+0

'.serialize'函数返回一个字符串,而不是数组。所以你不能那样做,并且期望它能够工作。不知道为什么你首先使用'.serialize',看起来似乎更容易从选定的选项构建你需要的对象。 –

回答

1

如果你的数据格式是可靠的rate_N=X&格式,你可以使用简单的字符串分割为p剔除这些值。这似乎与查询字符串的格式相似,如果是这种情况,则不应碰到(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>

+0

真棒这就是我想要的:)谢谢你 – Munna

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

哇,这很甜蜜。 – garryp