[英]Adding a new array element to a JSON object
我有一个 JSON 格式 object 我从一个名为 teamJSON 的变量中的 JSON 文件中读取,它看起来像这样:
{"theTeam":[{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"3","status":"member"}]}
我想向数组中添加一个新项目,例如
{"teamId":"4","status":"pending"}
以结束
{"theTeam":[{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"3","status":"member"},{"teamId":"4","status":"pending"}]}
在写回文件之前。 添加新元素的好方法是什么? 我接近了,但所有双引号都被转义了。 我已经在 SO 上寻找了一个很好的答案,但没有一个能完全涵盖这种情况。 任何帮助表示赞赏。
JSON只是一个符号; 进行您想要parse
的更改,以便您可以将更改应用于本机JavaScript Object ,然后stringify
回JSON
var jsonStr = '{"theTeam":[{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"3","status":"member"}]}';
var obj = JSON.parse(jsonStr);
obj['theTeam'].push({"teamId":"4","status":"pending"});
jsonStr = JSON.stringify(obj);
// "{"theTeam":[{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"3","status":"member"},{"teamId":"4","status":"pending"}]}"
var Str_txt = '{"theTeam":[{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"3","status":"member"}]}';
如果要添加到最后一个位置,请使用以下命令:
var parse_obj = JSON.parse(Str_txt);
parse_obj['theTeam'].push({"teamId":"4","status":"pending"});
Str_txt = JSON.stringify(parse_obj);
Output //"{"theTeam":[{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"3","status":"member"},{"teamId":"4","status":"pending"}]}"
如果要在第一个位置添加,请使用以下代码:
var parse_obj = JSON.parse(Str_txt);
parse_obj['theTeam'].unshift({"teamId":"4","status":"pending"});
Str_txt = JSON.stringify(parse_obj);
Output //"{"theTeam":[{"teamId":"4","status":"pending"},{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"3","status":"member"}]}"
任何想在数组的某个位置添加的人试试这个:
parse_obj['theTeam'].splice(2, 0, {"teamId":"4","status":"pending"});
Output //"{"theTeam":[{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"4","status":"pending"},{"teamId":"3","status":"member"}]}"
上面的代码块在第二个元素之后添加了一个元素。
首先我们需要解析 JSON 对象,然后我们可以添加一个项目。
var str = '{"theTeam":[{"teamId":"1","status":"pending"},
{"teamId":"2","status":"member"},{"teamId":"3","status":"member"}]}';
var obj = JSON.parse(str);
obj['theTeam'].push({"teamId":"4","status":"pending"});
str = JSON.stringify(obj);
最后我们JSON.stringify obj回到 JSON
就我而言,我的 JSON 对象中没有任何现有的数组,因此我必须先创建数组元素,然后再推送该元素。
elementToPush = [1, 2, 3]
if (!obj.arr) this.$set(obj, "arr", [])
obj.arr.push(elementToPush)
(此答案可能与此特定问题无关,但可能对其他人有所帮助)
例如,这里有一个类似按钮的元素,用于将项目添加到购物篮以及用于保存在 localStorage 中的适当属性。
'<a href="#" cartBtn pr_id='+e.id+' pr_name_en="'+e.nameEn+'" pr_price="'+e.price+'" pr_image="'+e.image+'" class="btn btn-primary"><i class="fa fa-shopping-cart"></i>Add to cart</a>'
var productArray=[];
$(document).on('click','[cartBtn]',function(e){
e.preventDefault();
$(this).html('<i class="fa fa-check"></i>Added to cart');
console.log('Item added ');
var productJSON={"id":$(this).attr('pr_id'), "nameEn":$(this).attr('pr_name_en'), "price":$(this).attr('pr_price'), "image":$(this).attr('pr_image')};
if(localStorage.getObj('product')!==null){
productArray=localStorage.getObj('product');
productArray.push(productJSON);
localStorage.setObj('product', productArray);
}
else{
productArray.push(productJSON);
localStorage.setObj('product', productArray);
}
});
Storage.prototype.setObj = function(key, value) {
this.setItem(key, JSON.stringify(value));
}
Storage.prototype.getObj = function(key) {
var value = this.getItem(key);
return value && JSON.parse(value);
}
将 JSON 对象添加到 Array 结果是(在 LocalStorage 中):
[{"id":"99","nameEn":"Product Name1","price":"767","image":"1462012597217.jpeg"},{"id":"93","nameEn" :"Product Name2","price":"76","image":"1461449637106.jpeg"},{"id":"94","nameEn":"Product Name3","price":"87" ,"image":"1461449679506.jpeg"}]
执行此操作后,您可以轻松地将数据作为 Java 中的列表发送到服务器
完整的代码示例在这里
使用传播运算符
array1 = [ { "column": "Level", "valueOperator": "=", "value": "Organization" } ]; array2 = [ { "column": "Level", "valueOperator": "=", "value": "Division" } ]; array3 = [ { "column": "Level", "operator": "=", "value": "Country" } ]; console.log(array1.push(...array2,...array3));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.