Menambahkan elemen array baru ke objek JSON

120

Saya memiliki objek format JSON yang saya baca dari file JSON yang saya miliki dalam variabel bernama teamJSON, yang terlihat seperti ini:

 {"theTeam":[{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"3","status":"member"}]}

Saya ingin menambahkan item baru ke array, seperti

{"teamId":"4","status":"pending"}

untuk berakhir dengan

{"theTeam":[{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"3","status":"member"},{"teamId":"4","status":"pending"}]}

sebelum menulis kembali ke file. Apa cara yang baik untuk menambahkan elemen baru? Saya mendekati tetapi semua tanda kutip ganda lolos. Saya telah mencari jawaban yang bagus tentang SO tetapi tidak ada yang cukup menutupi kasus ini. Setiap bantuan dihargai.

Charles Wyke-Smith
sumber
6
yourObj.theTeam.push({"teamId":"4","status":"pending"});
PSL
2
"JSON" bukanlah sebuah objek - ini sebuah notasi.
Brad Christie
1
Saat Anda membaca objek JSON dari file, apakah itu ditafsirkan sebagai JSON atau string? Jika ini adalah string, Anda perlu mengurai string sebagai JSON terlebih dahulu, lalu Anda dapat melakukan apa yang disarankan oleh komentar dan jawaban lain.
Tandai
3
@Charles membaca judul Anda dan memeriksa kembali komentar Anda.
Brad Christie
1
@ CharlesWyke-Smith Apa jenis teamJSONvariabel Anda ? Apakah itu string JSON, yaitu '{"theTeam":[...]}'atau literal objek yang sebenarnya? Petunjuk: gunakanconsole.log(typeof teamJSON)
Phil

Jawaban:

233

JSON hanyalah sebuah notasi ; untuk membuat perubahan yang Anda inginkan parsesehingga Anda dapat menerapkan perubahan ke Objek JavaScript asli , lalu stringifykembali ke 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"}]}"
Paul S.
sumber
16
1 untuk menunjukkan ini perlu diurai ke objek terlebih dahulu untuk dimanipulasi.
Brad Christie
3
Dia bilang dia sudah memiliki objek dalam variabel bernama teamJSON. Tidak ada satu hal pun yang menyebutkan string
Phil
6
@Phil: Jika itu JSON, itu adalah string. Jika tidak, itu bukan JSON.
pengguna2736012
1
Kutipan yang lolos sebenarnya membuat saya bertanya-tanya apakah JSON telah dikodekan dua kali.
pengguna2736012
24
Paul, itu adalah jawaban yang sangat konstruktif. Ini mengatasi kekurangan dalam pernyataan masalah tanpa meremehkan poster asli. Ini lebih jelas menggambarkan batas antara beroperasi pada objek javascript dan representasi teks JSON dari objek tersebut. Saya pikir penting untuk memahami bahwa setelah JSON diurai, kita beroperasi pada objek javascript murni - fakta bahwa mereka awalnya berasal dari JSON tidaklah relevan. Ngomong-ngomong, membaca jawaban Anda adalah angin segar setelah semua komentar menghina membuat OP merasa seperti orang bodoh.
Larry Hector
20
var Str_txt = '{"theTeam":[{"teamId":"1","status":"pending"},{"teamId":"2","status":"member"},{"teamId":"3","status":"member"}]}';

Jika Anda ingin menambahkan pada posisi terakhir, gunakan ini:

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"}]}"

Jika ingin menambahkan posisi pertama maka gunakan kode berikut:

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"}]}"

Siapapun yang ingin menambahkan pada posisi tertentu dari sebuah larik coba ini:

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"}]}"

Blok kode di atas menambahkan elemen setelah elemen kedua.

Ajay Gupta
sumber
1

Pertama kita perlu mengurai objek JSON dan kemudian kita bisa menambahkan item.

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);

Akhirnya kami JSON.stringify yang obj kembali ke JSON

Abhijit
sumber
Bagaimana jika JSON kita tidak memiliki nama seperti theTeam, tetapi hanya berisi node dengan elemen teamId & status? jadi milik saya akan terlihat seperti: var str = '[{"teamId": "1", "status": "pending"}, {"teamId": "2", "status": "member"}, {"teamId ":" 3 "," status ":" member "}] ';
Shafique
0

Misalnya di sini adalah elemen seperti tombol untuk menambahkan item ke keranjang dan atribut yang sesuai untuk disimpan di penyimpanan lokal.

'<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);
}

Setelah menambahkan objek JSON ke hasil Array adalah (di LocalStorage):

[{"id": "99", "nameEn": "Product Name1", "price": "767", "image": "1462012597217.jpeg"}, {"id": "93", "nameEn" : "Nama Produk2", "harga": "76", "gambar": "1461449637106.jpeg"}, {"id": "94", "nameEn": "Nama Produk3", "harga": "87" , "image": "1461449679506.jpeg"}]

setelah tindakan ini Anda dapat dengan mudah mengirim data ke server sebagai List di Java

Contoh kode lengkap ada di sini

Bagaimana cara menyimpan keranjang sederhana menggunakan localStorage?

Musa
sumber
0

Dalam kasus saya, objek JSON saya tidak memiliki Array yang ada di dalamnya, jadi saya harus membuat elemen array terlebih dahulu dan kemudian harus mendorong elemen tersebut.

  elementToPush = [1, 2, 3]
  if (!obj.arr) this.$set(obj, "arr", [])
  obj.arr.push(elementToPush)  

(Jawaban ini mungkin tidak relevan dengan pertanyaan khusus ini, tetapi dapat membantu orang lain)

Ajit A. Kenjale
sumber
0

Misalkan kita sudah memiliki data dalam variabel alreadyData;

var alreadyData=[{"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"}];

var fields = []; //new array
var json = JSON.parse(alreadyData); //just parse in one variable
var json = JSON.parse(tableColumns);
for (var i = 0; i < json.length; i++) {
    fields.push(json[i]);//push data in fields
} 
fields.push({ 'id':33, 'nameEn': 'Singh', 'price': '222','image': '1462012597217.jpeg' }); // its new data
Davinder Singh
sumber