Προσθήκη ενός νέου στοιχείου πίνακα σε ένα αντικείμενο JSON

Έχω ένα αντικείμενο μορφής JSON που διαβάζω από ένα αρχείο JSON το οποίο έχω σε μια μεταβλητή που ονομάζεται teamJSON και μοιάζει με αυτό:

 {"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 είναι απλώς μια σημείωση- για να κάνετε την αλλαγή που θέλετε `αναλύστε ώστε να μπορείτε να εφαρμόσετε τις αλλαγές σε ένα εγγενές 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"}]}"
Σχόλια (7)
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"}]}"

Το παραπάνω μπλοκ κώδικα προσθέτει ένα στοιχείο μετά το δεύτερο στοιχείο.

Σχόλια (0)

Για παράδειγμα, εδώ είναι ένα στοιχείο όπως το κουμπί για την προσθήκη στοιχείου στο καλάθι και τα κατάλληλα χαρακτηριστικά για την αποθήκευση στο 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">Add to cart</a>'

var productArray=[];

$(document).on('click','[cartBtn]',function(e){
  e.preventDefault();
  $(this).html('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":"Όνομα προϊόντος1","price":"767","image":"1462012597217.jpeg"},{"id":"93","nameEn":"Όνομα προϊόντος2","τιμή":"76","εικόνα":"1461449637106.jpeg"},{"id":"94","nameEn":"Όνομα προϊόντος3","τιμή":"87","εικόνα":"1461449679506.jpeg"}]

μετά από αυτή την ενέργεια μπορείτε εύκολα να στείλετε τα δεδομένα στο διακομιστή ως List σε Java

Το πλήρες παράδειγμα κώδικα είναι εδώ

https://stackoverflow.com/questions/23554456/how-do-i-store-a-simple-cart-using-localstorage/37169851#37169851

Σχόλια (0)