向 JSON 对象添加新的数组元素

IT技术 javascript json
2021-02-02 01:21:55

我有一个 JSON 格式的对象,我从一个名为 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 上寻找了一个很好的答案,但没有一个完全涵盖这种情况。任何帮助表示赞赏。

5个回答

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"}]}"
他说他已经在一个名为teamJSON. 任何时候都没有提到字符串
2021-03-30 01:21:55
保罗,这是一个非常有建设性的回答。它在不贬低原始海报的情况下解决了问题陈述中的缺陷。它更清楚地描绘了对 javascript 对象的操作和这些对象的 JSON 文本表示之间的界限。我认为理解一旦 JSON 被解析,我们正在对纯 javascript 对象进行操作是必不可少的——它们最初来自 JSON 的事实是无关紧要的。无论如何,在所有贬损性评论使 OP 感觉自己像个白痴之后,阅读您的答案是一股清新的空气。
2021-03-31 01:21:55
+1指出这需要首先解析为要操作的对象。
2021-04-04 01:21:55
@Phil:如果是 JSON,则是字符串。如果不是,则不是 JSON。
2021-04-09 01:21:55
转义的引号实际上让我怀疑 JSON 是否被编码了两次。
2021-04-09 01:21:55
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.stringifyOBJ回JSON

沙菲克:那就更容易了。只需删除 ['theTeam']。obj 之后的部分。所以:obj.push(...)
2021-04-05 01:21:55
如果我们的 JSON 没有像 theTeam 这样的名称,而是只包含具有 teamId 和 status 元素的节点怎么办?所以我的看起来像: var str = '[{"teamId":"1","status":"pending"}, {"teamId":"2","status":"member"},{"teamId ":"3","status":"member"}]';
2021-04-12 01:21:55

就我而言,我的 JSON 对象中没有任何现有的 Array,因此我必须先创建数组元素,然后再推送该元素。

  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" ,"图像":"1461449679506.jpeg"}]

执行此操作后,您可以轻松地将数据作为 Java 中的列表发送到服务器

完整的代码示例在这里

如何使用 localStorage 存储一个简单的购物车?