JSON ऑब्जेक्ट में एक नया सरणी तत्व जोड़ना


120

मेरे पास एक JSON फॉर्मेट ऑब्जेक्ट है जिसे मैंने 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"}]}

फ़ाइल पर वापस लिखने से पहले। नए तत्व को जोड़ने का एक अच्छा तरीका क्या है? मैं पास हो गया लेकिन सभी दोहरे उद्धरण बच गए। मैंने एसओ पर एक अच्छे उत्तर की तलाश की है लेकिन कोई भी इस मामले को कवर नहीं करता है। किसी भी मदद की सराहना की है।


6
yourObj.theTeam.push({"teamId":"4","status":"pending"});
PSL

2
"JSON" एक वस्तु नहीं है - यह एक संकेतन है।
ब्रैड क्रिस्टी

1
जब आप फ़ाइल से JSON ऑब्जेक्ट पढ़ते हैं, तो क्या इसे JSON या स्ट्रिंग के रूप में व्याख्या किया जा रहा है? यदि इसकी एक स्ट्रिंग आपको पहले JSON के रूप में स्ट्रिंग को पार्स करने की आवश्यकता है, तो आप वह कर सकते हैं जो अन्य टिप्पणी और उत्तर सुझा रहे हैं।
मार्क

3
@Charles आपके शीर्षक को पढ़ता है और फिर आपकी टिप्पणी को फिर से जाँचता है।
ब्रैड क्रिस्टी

1
@ चार्ल्सवाके-स्मिथ आपका teamJSONचर किस प्रकार का है ? क्या यह JSON स्ट्रिंग है, '{"theTeam":[...]}'या वास्तविक वस्तु शाब्दिक है? संकेत: उपयोगconsole.log(typeof teamJSON)
फिल

जवाबों:


233

JSON सिर्फ एक संकेतन है ; जो परिवर्तन आप चाहते हैं, parseउसे करने के लिए आप देशी जावास्क्रिप्ट ऑब्जेक्ट में परिवर्तन लागू कर सकते हैं , फिर JSON परstringify वापस आ सकते हैं

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

16
यह इंगित करने के लिए कि पहले किसी वस्तु में हेरफेर किए जाने की आवश्यकता है।
ब्रैड क्रिस्टी

3
उन्होंने कहा कि उनके पास पहले से ही एक चर नाम की वस्तु है teamJSON। किसी भी बिंदु पर एक स्ट्रिंग का उल्लेख नहीं है
फिल

6
@Phil: यदि यह JSON है, तो यह एक स्ट्रिंग है। यदि यह नहीं है, तो यह JSON नहीं है।
user2736012

1
बच गए उद्धरण वास्तव में मुझे आश्चर्यचकित करते हैं कि क्या JSON दो बार एनकोड किया गया था।
user2736012

24
पॉल, यह एक बहुत रचनात्मक जवाब है। यह मूल पोस्टर को प्रभावित किए बिना समस्या बयान में कमी को संबोधित करता है। यह अधिक स्पष्ट रूप से जावास्क्रिप्ट वस्तुओं पर परिचालन और उन वस्तुओं के JSON पाठ प्रतिनिधित्व के बीच की सीमाओं को स्पष्ट करता है। मुझे लगता है कि यह समझने में जरूरी है कि एक बार JSON को पार्स कर दिया गया है, हम शुद्ध जावास्क्रिप्ट वस्तुओं पर काम कर रहे हैं - यह तथ्य कि वे मूल रूप से JSON से आए थे अप्रासंगिक हैं। वैसे भी, आपके जवाब को पढ़ने के बाद ताजा हवा का एक सांस था क्योंकि सभी अपमानजनक टिप्पणियों ने ओपी को एक बेवकूफ की तरह महसूस किया।
लैरी हेक्टर

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

ऊपर कोड ब्लॉक दूसरे तत्व के बाद एक तत्व जोड़ता है।


1

पहले हमें 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 में TheTeam जैसा नाम नहीं है, लेकिन इसके बजाय केवल तत्वों के साथ नोड्स शामिल हैं IId और स्थिति? तो मेरा ऐसा दिखेगा: var str = '[{"teamId": "1", "status": "लंबित"}, {"teamId": "2", "status": "सदस्य"}, {"teamId" ":" 3 "," स्थिति ":" सदस्य "}] ';
शफिक

0

उदाहरण के लिए यहां टोकरी में आइटम जोड़ने के लिए बटन और लोकलस्टोरेज में बचत के लिए उपयुक्त विशेषताओं के लिए एक तत्व है।

'<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 के परिणाम में जोड़ने के बाद (लोकलस्टोरेज में) है:

[{"id": "९९", "nameEn": "उत्पाद का नाम १", "मूल्य": "image६ image", "छवि": "१४६२०२५ ९ .२.१..jpeg"}, {"id": "९ ३", "nameEn" : "उत्पाद का नाम 2", "मूल्य": "76", "छवि": "1461449637106.jpeg"}, {"आईडी": "94", "नाम": "उत्पाद नाम 3", "मूल्य": "87" , "छवि": "1461449679506.jpeg"}]

इस क्रिया के बाद आप आसानी से जावा में सूची के रूप में सर्वर को डेटा भेज सकते हैं

पूर्ण कोड उदाहरण यहाँ है

मैं स्थानीयस्टोरेज का उपयोग करके एक साधारण गाड़ी कैसे स्टोर कर सकता हूं?


0

मेरे मामले में, मेरी JSON ऑब्जेक्ट में कोई मौजूदा ऐरे नहीं था, इसलिए मुझे पहले एलीमेंट एलीमेंट बनाना था और फिर एलीमेंट को पुश करना था।

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

(यह उत्तर इस विशेष प्रश्न के लिए प्रासंगिक नहीं हो सकता है, लेकिन किसी और की मदद कर सकता है)


0

मान लीजिए कि हमारे पास पहले से ही चर में डेटा है 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.