Tenho um objeto em formato JSON que li de um arquivo JSON que tenho em uma variável chamada teamJSON, que se parece com isto:
{"theTeam":[{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"3","status":"member"}]}
Eu quero adicionar um novo item à matriz, como
{"teamId":"4","status":"pending"}
para acabar com
{"theTeam":[{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"3","status":"member"},{"teamId":"4","status":"pending"}]}
antes de escrever de volta para o arquivo. O que é uma boa maneira de adicionar ao novo elemento? Estive perto, mas todas as aspas duplas escaparam. Procurei uma boa resposta em SO, mas nenhuma cobre bem este caso. Qualquer ajuda é bem-vinda.
JSON é apenas uma notação; para fazer a alteração que você quer parse
para que você possa aplicar as alterações a um objeto JavaScript nativo, então stringificar
voltar para 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"}]}';
Se você quiser **add na última posição***, então use isto:
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"}]}"
Se você quiser **add na primeira posição***, use o seguinte código:
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"}]}"
Qualquer um que queira add numa determinada posição de uma matriz, experimente isto:
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"}]}"
O bloco de código acima adiciona um elemento após o segundo elemento.
Por exemplo, aqui está um elemento como um botão para adicionar um item ao cesto e atributos apropriados para salvar no 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);
}
Depois de adicionar o objeto JSON ao resultado do Array é (em LocalStorage):
{"id":"99","nameEn":"Nome do produto1","preço":"767","imagem":"1462012597217.jpeg"},{"id":"93","nomeEn":"Nome do produto2","preço":"76","imagem":"1461449637106.jpeg"},{"id":"94","nomeEn":"Nome do produto3","preço":"87","imagem":"1461449679506.jpeg"}]
após esta ação você pode facilmente enviar dados para o servidor como List
Exemplo de código completo está aqui