जावास्क्रिप्ट का उपयोग करके JSON ऑब्जेक्ट में नई विशेषता (तत्व) जोड़ें


439

मैं जावास्क्रिप्ट का उपयोग करके JSON ऑब्जेक्ट में नई विशेषता (तत्व) कैसे जोड़ूं?

जवाबों:


628

JSON का अर्थ जावास्क्रिप्ट ऑब्जेक्ट नोटेशन है। एक JSON ऑब्जेक्ट वास्तव में एक स्ट्रिंग है जिसे अभी तक उस ऑब्जेक्ट में बदल दिया जाना है जो इसका प्रतिनिधित्व करता है।

जेएस में एक मौजूदा वस्तु के लिए एक संपत्ति जोड़ने के लिए आप निम्नलिखित कार्य कर सकते हैं।

object["property"] = value;

या

object.property = value;

यदि आप कुछ अतिरिक्त जानकारी प्रदान करते हैं, जैसे कि आपको संदर्भ में क्या करने की आवश्यकता है, तो आपको अधिक अनुरूपित उत्तर मिल सकता है।


6
@shanehoban यहां aJSON है, a.sजैसा कि आपके द्वारा परिभाषित केवल एक स्ट्रिंग है। अब आप ["subproperty"]एक स्ट्रिंग में जोड़ने की कोशिश कर रहे हैं । क्या अब आप समझ गए हैं कि u को त्रुटि क्यों मिली?
शिवाम

1
शुरुआती लोगों के लिए, याद रखें कि जैसा कि क्विंटन कहते हैं, एक JSON "ऑब्जेक्ट" एक वस्तु नहीं है, यह सिर्फ एक स्ट्रिंग है। आपको उसके उदाहरण को JSON.parse () के साथ एक वास्तविक जावास्क्रिप्ट ऑब्जेक्ट में बदलने की आवश्यकता होगीobject["property"] = value;
SpaceNinja

2
@ shhanhoban शीर्ष पर मेरे उत्तर की जाँच करें और आप देखेंगे कि आप एक साथ कई विशेषताओं को कैसे जोड़ सकते हैं।
विक्टर ऑगस्टो

1
@EduardoLucio ऐसा इसलिए है क्योंकि आपको इसका उपयोग करना चाहिए JSON.stringify
सोलोमन उको

1
@EduardoLucio मुद्दा यह है कि console.logक्रमांकन के लिए इरादा नहीं है। का उपयोग करें console.log(JSON. stringify(object))
सोलोमन उको

182
var jsonObj = {
    members: 
           {
            host: "hostName",
            viewers: 
            {
                user1: "value1",
                user2: "value2",
                user3: "value3"
            }
        }
}

var i;

for(i=4; i<=8; i++){
    var newUser = "user" + i;
    var newValue = "value" + i;
    jsonObj.members.viewers[newUser] = newValue ;

}

console.log(jsonObj);

6
बस मैं क्या देख रहा था, एक तत्व जोड़ना जब नाम को प्रोग्रामेटिक रूप से निर्माण किया जाना चाहिए
quilkin

4
महान उदाहरण। यह मेरी मदद करता है।
रिकी

152

एक JSON ऑब्जेक्ट बस एक जावास्क्रिप्ट ऑब्जेक्ट है, इसलिए जावास्क्रिप्ट एक प्रोटोटाइप आधारित भाषा होने के साथ, आपको केवल डॉट नोटेशन का उपयोग करके इसे संबोधित करना है।

mything.NewField = 'foo';

यह बात है, मैं जावास्क्रिप्ट प्रोटोटाइप प्यार करता हूँ!
कैगलर

70

इस पोस्ट के लिए धन्यवाद। मैं कुछ जोड़ना चाहता हूं जो उपयोगी हो सकता है।

IE के लिए, यह उपयोग करने के लिए अच्छा है

object["property"] = value;

सिंटैक्स क्योंकि IE में कुछ विशेष शब्द आपको एक त्रुटि दे सकते हैं।

एक उदाहरण:

object.class = 'value';

यह IE में विफल रहता है, क्योंकि " वर्ग " एक विशेष शब्द है। मैंने इसके साथ कई घंटे बिताए।


@ सुनील गर्ग मूल मूल्य में कुछ माता-पिता के लिए एक बच्चे के रूप में आप उस मूल्य को कैसे स्टोर करेंगे?
जेमी कॉर्कहिल

42

2015 से ECMAScript के साथ आप स्प्रेड सिंटैक्स (… तीन डॉट्स) का उपयोग कर सकते हैं:

let  people = { id: 4 ,firstName: 'John'};
people = { ...people, secondName: 'Fogerty'};

यह आपको उप ऑब्जेक्ट जोड़ने की अनुमति देता है:

people = { ...people, city: { state: 'California' }};

परिणाम होगा:

{  
   "id": 4,
   "firstName": "John",
   "secondName": "Forget",
   "city": {  
      "state": "California"
   }
}

आप वस्तुओं का विलय भी कर सकते हैं:

var mergedObj = { ...obj1, ...obj2 };

13

Object.assignसे भी उपयोग कर सकते हैं ECMAScript 2015। यह आपको एक बार में नेस्टेड विशेषताओं को जोड़ने की अनुमति भी देता है। उदाहरण के लिए:

const myObject = {};

Object.assign(myObject, {
    firstNewAttribute: {
        nestedAttribute: 'woohoo!'
    }
});

Ps: यह असाइन किए गए विशेषताओं के साथ मौजूदा ऑब्जेक्ट को ओवरराइड नहीं करेगा। इसके बजाय उन्हें जोड़ा जाएगा। हालाँकि यदि आप किसी मौजूदा विशेषता के लिए मान निर्दिष्ट करते हैं तो इसे ओवरराइड किया जाएगा।


7
extend: function(){
    if(arguments.length === 0){ return; }
    var x = arguments.length === 1 ? this : arguments[0];
    var y;

    for(var i = 1, len = arguments.length; i < len; i++) {
        y = arguments[i];
        for(var key in y){
            if(!(y[key] instanceof Function)){
                x[key] = y[key];
            }
        }           
    };

    return x;
}

कई जोंस ऑब्जेक्ट्स (कार्यों को अनदेखा करता है) बढ़ाता है:

extend({obj: 'hej'}, {obj2: 'helo'}, {obj3: {objinside: 'yes'}});

एक एकल वस्तु वस्तु में परिणाम होगा


2

आप अपने कार्य में नई जॅसन ऑब्जेक्ट्स भी जोड़ सकते हैं, विस्तार फ़ंक्शन का उपयोग करके ,

var newJson = $.extend({}, {my:"json"}, {other:"json"});
// result -> {my: "json", other: "json"}

विस्तार समारोह के लिए एक बहुत अच्छा विकल्प पुनरावर्ती मर्ज है। बस पहले पैरामीटर के रूप में सही मान जोड़ें (अधिक विकल्पों के लिए प्रलेखन पढ़ें)। उदाहरण,

var newJson = $.extend(true, {}, {
    my:"json",
    nestedJson: {a1:1, a2:2}
}, {
    other:"json",
    nestedJson: {b1:1, b2:2}
});
// result -> {my: "json", other: "json", nestedJson: {a1:1, a2:2, b1:1, b2:2}}

2

आप गतिशील रूप से किसी वस्तु शाब्दिक रूप से चर के साथ विशेषताएँ जोड़ सकते हैं।

const amountAttribute = 'amount';
const foo = {
                [amountAttribute]: 1
            };
foo[amountAttribute + "__more"] = 2;

का परिणाम:

{
    amount: 1, 
    amount__more: 2
}

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