使用JSON解析/字符串处理数据

问题描述:

我有一个关于使用Javascript和stringify /解析操纵JSON数据的问题。在下面的例子中,我创建了一个JSON字符串,然后使用parse将其转换回一个对象。这样做后,我想要做的是删除一个具有特定ID的项目,我唯一能找到的方法是遍历整个数组,并在找到匹配项时从数组中删除元素。这似乎不是很有效。有一个更好的方法吗?使用JSON解析/字符串处理数据

var employees = []; 

//build the array 
for (var i=0; i < 10; i++) { 
    var player = { "id": i, "salary": i*1000000 }; 
    employees.push(player); 
} 

json_employees = JSON.stringify({employees: employees}); //convert to json string 
alert(json_employees); //display the new string 

var obj = JSON.parse(json_employees); //convert back to a Javascript object 

for (var j=0; j < obj.employees.length; j++) { // loop through the array 
    if (obj.employees[j].id === 5) // is it the employee with id 5? 
     obj.employees.splice(j, 1); // remove the fifth item 
} 

json_modified_employees = JSON.stringify({employees: obj.employees}); //convert back to json string 
alert(json_modified_employees); //display the new string 
+0

在这种情况下,您会按照ID的顺序将员工推到数组上。这在你的实际代码中也是如此吗? – 2013-02-11 17:38:41

+0

没有循环?没有......好吧......你可以用正则表达式来破解字符串,但是这可能比遍历数组更糟...... – Tivie 2013-02-11 17:38:45

+0

这与JSON有什么关系?你有同样的问题试图找到原来的'员工'阵列中的项目,是吗? – Barmar 2013-02-11 17:47:37

您可以在员工存储中的对象,他们的id的关键,是这样的:

// create a store object 
var employees = {}; 

//build the array 
for (var i=0; i < 10; i++) { 
    var player = { "id": i, "salary": i*1000000 }; 
    // add item to store object with a key of 'pk' + i 
    employees['pk' + i] = player; 
} 

json_employees = JSON.stringify({employees: employees}); //convert to json string 
alert(json_employees); //display the new string 

var obj = JSON.parse(json_employees); //convert back to a Javascript object 

// remove the required item (in this case number 5) 
delete obj.employees['pk' + 5]; 

json_modified_employees = JSON.stringify({employees: obj.employees}); //convert back to json string 
alert(json_modified_employees); //display the new string 

然后,如果您想遍历你的员工,你会

for (var key in employees) { 
    if (employees.hasOwnProperty(key)) { 
     alert(employees[key].id) 
    } 
} 
+0

ID不会必须匹配数组的索引。感谢所有伟大的答案,尤其是Dve! – cgdeveloper 2013-02-11 18:46:55