使用json解析字符串数据并在函数中使用它

时间:2014-03-19 15:50:20

标签: javascript json parsing

这里我有两个变量:

var id = '3, 5 ,16,'; //n number if elements
var naziv = 'fieldY, fieldX, fieldQ,';  //same number of strings like number of id

我需要在select2插件中使用这些变量,所以我需要从这些数据中创建一个数组,如下所示:

[{id: "3", title: "fieldY"},{id: "5", title: "fieldX"},{id: "16", title: "fieldQ"}] ... 

所以我可以使用这个变量id,naziv进入select2函数:

$("#e6").select2("data", [{id: "3", title: "fieldY"},{id: "5", title: "fieldX"},{id: "16", title: "fieldQ"}]); 

那么我如何将id, naziv转换为我需要的格式呢?

UPDATE:id,naziv musr没有引号,所以没有" id"只是id ...就是问题

3 个答案:

答案 0 :(得分:1)

试试这个:http://jsbin.com/ridoqupi/4/edit

var id = '3, 5 ,16,'; //n number if elements
var naziv = 'fieldY, fieldX, fieldQ,';  

var g1=id.split(',');
var g2=naziv.split(',');

var g=[];

for (var i=0;i<g1.length;i++)
  {
    if (g1[i]&&g2[i])
    g.push({id:g1[i].trim() , title:g2[i].trim()})
}
console.log(JSON.stringify(g))

 //result  : [{"id":"3","title":"fieldY"},{"id":" 5 ","title":" fieldX"},{"id":"16","title":" fieldQ"}] 

答案 1 :(得分:1)

这应该做的工作:

var s1 = id.split(/,\s*/);
var s2 = naziv.split(/,\s*/);
var result = [];

for (var i = 0; i < s1.length; i++) {
    if (s1[i] && s2[i]) result.push({"id":parseInt(s1[i].trim()),"text":s2[i].trim()});
}

$("#parcele1").select2({ data:result });

结果现在将返回所需的结果,无论逗号放在何处,无论每个逗号之前/之后是否有空格。

答案 2 :(得分:1)

我假设id字段有一个类型,应该是var id = '3, 5, 16,'

我们可以将字符串转换为.split(', ')的数组,但是我们需要从末尾删除尾随的逗号。如果我们知道它总是会有一个尾随的逗号,我们可以使用.substr(0, [strvariable].length - 1)执行此操作,或者我们只需使用[strvariable].lastIndexOf(',') == ([strvariable].length - 1) ? [strvariable].substr(0, [strvariable].length - 1) : [strvariable]进行检查即可。 这个细分的最终代码最终会像这样结束。

var idArr = (id.lastIndexOf(',') == (id.length - 1) ? id.substr(0, id.length - 1) : id).split(', ');
var nazivArr = (naziv.lastIndexOf(',') == (naziv.length - 1) ? naziv.substr(0, naziv.length - 1) : naziv).split(', ');

所以,现在我们有两个关联数组,我们只需要循环来创建我们的对象。我们将创建一个数组来保存我们的对象并将所有对象填充到那里。

var objHold = [];
for(var i=0,length=idArr.length;i<length;i++)
{
    if(idArr[i] && nazivArr[i]) // make sure both arrays have a value
    objHold.push({id: idArr[i], title: nazivArr[i]});
}

现在您可以致电$("#e6").select2("data", objHold);

最终代码

var id = '3, 5, 16,'; //n number if elements
var naziv = 'fieldY, fieldX, fieldQ,';  //same number of strings like number of id
var idArr = (id.lastIndexOf(',') == (id.length - 1) ? id.substr(0, id.length - 1) : id).split(', ');
var nazivArr = (naziv.lastIndexOf(',') == (naziv.length - 1) ? naziv.substr(0, naziv.length - 1) : naziv).split(', ');
var objHold = [];
for(var i=0,length=idArr.length;i<length;i++)
{
    if(idArr[i] && nazivArr[i]) // make sure both arrays have a value
    objHold.push({id: idArr[i], title: nazivArr[i]});
}
$("#e6").select2("data", objHold);