使用JQuery添加/删除JSON数据中的项目
我有一个JSON对象,如下所示:
var data = {items: [ {id: "1", name: "Snatch", type: "crime"}, {id: "2", name: "Witches of Eastwick", type: "comedy"}, {id: "3", name: "X-Men", type: "action"}, {id: "4", name: "Ordinary People", type: "drama"}, {id: "5", name: "Billy Elliot", type: "drama"}, {id: "6", name: "Toy Story", type: "children"} ]};
如果我想添加/删除项目到这个列表,我将如何去使用JQuery? 我知道如果我们简单地使用一个数组,我可以很容易地做到这一点,但以前的程序员已经使用JSON构build了代码,现在客户端在最后一刻改变了主意,希望这个列表可以dynamic修改。 我想节省时间从重写所有的代码使用数组而不是JSON,所以想知道是否有人知道一种方法来实现这一点,因为我似乎无法find关于如何操纵JSON与JQuery的任何地方在网上。
非常感谢!
首先,你的引用代码不是 JSON。 你的代码是JavaScript对象文字符号。 JSON是为简化parsing而devise的子集。
你的代码定义了一个包含对象的数组(对象)(每个对象都有一个id
, name
和type
)的对象( data
)。
你不需要或想要这个jQuery,只是JavaScript。
添加一个项目:
data.items.push( {id: "7", name: "Douglas Adams", type: "comedy"} );
这增加了最后。 见下面添加在中间。
删除项目:
有几种方法。 splice
方法是最通用的:
data.items.splice(1, 3); // Removes three items starting with the 2nd, // ("Witches of Eastwick", "X-Men", "Ordinary People")
splice
修改原始数组,并返回您删除的项目的数组。
在中间添加:
splice
实际上既添加又删除。 splice
方法的签名是:
removed_items = arrayObject.splice(index, num_to_remove[, add1[, add2[, ...]]]);
-
index
– 开始进行更改的索引 -
num_to_remove
– 从该索引开始,删除这些条目 -
addN
– …然后插入这些元素
所以我可以像这样在第三个位置添加一个项目:
data.items.splice(2, 0, {id: "7", name: "Douglas Adams", type: "comedy"} );
这是说:从索引2开始,删除零个项目,然后插入这个项目。 结果如下所示:
var data = {items: [ {id: "1", name: "Snatch", type: "crime"}, {id: "2", name: "Witches of Eastwick", type: "comedy"}, {id: "7", name: "Douglas Adams", type: "comedy"}, // <== The new item {id: "3", name: "X-Men", type: "action"}, {id: "4", name: "Ordinary People", type: "drama"}, {id: "5", name: "Billy Elliot", type: "drama"}, {id: "6", name: "Toy Story", type: "children"} ]};
你可以删除一些并添加一些:
data.items.splice(1, 3, {id: "7", name: "Douglas Adams", type: "comedy"}, {id: "8", name: "Dick Francis", type: "mystery"} );
…这意味着:从索引1开始,删除三个条目,然后添加这两个条目。 其结果是:
var data = {items: [ {id: "1", name: "Snatch", type: "crime"}, {id: "7", name: "Douglas Adams", type: "comedy"}, {id: "8", name: "Dick Francis", type: "mystery"}, {id: "4", name: "Ordinary People", type: "drama"}, {id: "5", name: "Billy Elliot", type: "drama"}, {id: "6", name: "Toy Story", type: "children"} ]};
拼接很好,每个人都解释拼接,所以我没有解释它。 你也可以在JavaScript中使用delete关键字,这很好。 你也可以使用$ .grep来操纵这个使用jQuery。
jQuery的方式:
data.items = jQuery.grep( data.items, function (item,index) { return item.id != "1"; });
删除方式:
delete data.items[0]
对于添加PUSH来说,拼接更好,因为拼接是重加权函数。 拼接创build一个新的数组,如果你有一个巨大的数组大小,那么它可能是麻烦的。 删除是有用的,删除后,如果你看数组的长度,那么在那里没有长度的变化。 所以明智地使用它。
这根本不是JSON,它只是Javascript对象。 JSON是数据的文本表示,它使用Javascript语法的子集。
你无法find关于使用jQuery来操纵JSON的任何信息的原因是因为jQuery没有任何东西可以做到这一点,而且一般都没有做到。 你以Javascript对象的forms操作数据,然后把它变成一个JSONstring,如果这是你所需要的。 (虽然jQuery确实有转换的方法)。
你所拥有的只是一个包含数组的对象,所以你可以使用你已有的所有知识。 只需使用data.items
来访问数组。
例如,要使用dynamic值将其他项添加到数组中:
// The values to put in the item var id = 7; var name = "The usual suspects"; var type = "crime"; // Create the item using the values var item = { id: id, name: name, type: type }; // Add the item to the array data.items.push(item);
如果您使用jQuery,则可以使用扩展function添加新项目。
var olddata = {"fruit":{"apples":10,"pears":21}}; var newdata = {}; newdata['vegetables'] = {"carrots": 2, "potatoes" : 5}; $.extend(true, olddata, newdata);
这将产生:
{"fruit":{"apples":10,"pears":21}, "vegetables":{"carrots":2,"potatoes":5}};
那么,这只是一个JavaScript对象,所以你可以像处理普通数组一样操作data.items
。 如果你这样做:
data.items.pop();
你的items
数组将缩短1个项目。
在json数组中添加一个对象
var arrList = []; var arr = {}; arr['worker_id'] = worker_id; arr['worker_nm'] = worker_nm; arrList.push(arr);
从json中删除一个对象
它为我工作。
arrList = $.grep(arrList, function (e) { if(e.worker_id == worker_id) { return false; } else { return true; } });
它返回一个没有该对象的数组。
希望它有帮助。