जंकरी का उपयोग करके प्रत्येक इनपुट मूल्य के साथ गतिशील रूप से JSON बनाना


91

मुझे एक ऐसी स्थिति मिली, जहाँ मैं PHP के माध्यम से JSON फॉर्मेट के कुछ डेटा को पढ़ना चाहूंगा, हालाँकि मुझे यह समझने में कुछ समस्याएँ आ रही हैं कि मुझे JSON प्रारूप को गतिशील रूप से बनाने के लिए जावास्क्रिप्ट ऑब्जेक्ट का निर्माण कैसे करना चाहिए।

मेरा परिदृश्य इस प्रकार है:

<input title="QA" type="text" class="email">
<input title="PROD" type="text" class="email">
<input title="DEV" type="text" class="email">

मेरे द्वारा अब तक प्राप्त किया गया जावास्क्रिप्ट कोड डेटा के प्रत्येक इनपुट के माध्यम से जाता है, लेकिन मैं यह समझने में असमर्थ हूं कि यहां से प्रक्रिया कैसे की जाए।

var taskArray = {};

$("input[class=email]").each(function() {
  var id = $(this).attr("title");
  var email = $(this).val();

  //how to create JSON?

});

यदि संभव हो तो मैं निम्नलिखित आउटपुट प्राप्त करना चाहूंगा।

[{title: QA, email: 'a@a.com'}, {title: PROD, email: 'b@b.com'},{title: DEV, email: 'c@c.com'}]

जहां इनपुट क्षेत्र मान द्वारा ईमेल प्राप्त किया जाता है।

जवाबों:


273

इस कदर:

function createJSON() {
    jsonObj = [];
    $("input[class=email]").each(function() {

        var id = $(this).attr("title");
        var email = $(this).val();

        item = {}
        item ["title"] = id;
        item ["email"] = email;

        jsonObj.push(item);
    });

    console.log(jsonObj);
}

व्याख्या

आप ढूंढ रहे हैं an array of objects। तो, आप एक रिक्त सरणी बनाते हैं। inputकुंजी के रूप में 'शीर्षक' और 'ईमेल' का उपयोग करके प्रत्येक के लिए एक वस्तु बनाएं । फिर आप प्रत्येक ऑब्जेक्ट को सरणी में जोड़ते हैं।

यदि आपको एक स्ट्रिंग की आवश्यकता है, तो करें

jsonString = JSON.stringify(jsonObj);

नमूना आउटपुट

[{"title":"QA","email":"a@b"},{"title":"PROD","email":"b@c"},{"title":"DEV","email":"c@d"}] 

इन 3 उदाहरणों में मुझे यह क्यों मिलता है? 'अनक्रेडेड रेफ़ररेंस: jsonObj परिभाषित नहीं है'
गीनो

@Gino क्या आपने पेस्ट या प्रकार की प्रतिलिपि बनाई? लाइन देखें जो jsonObj को परिभाषित करता है।
ATOzTOA 21

15

मुझे नहीं लगता कि आप जावास्क्रिप्ट वस्तुओं को केवल JQuery का उपयोग करके JSON स्ट्रिंग्स में बदल सकते हैं, यह मानते हुए कि आपको आउटपुट के रूप में JSON स्ट्रिंग की आवश्यकता है।

आपके द्वारा लक्षित किए जा रहे ब्राउज़रों के आधार पर, आप JSON.stringifyJSON स्ट्रिंग्स के उत्पादन के लिए फ़ंक्शन का उपयोग कर सकते हैं ।

अधिक जानकारी के लिए http://www.json.org/js.html देखें , वहाँ आप पुराने ब्राउज़र के लिए JSON पार्सर भी खोज सकते हैं जो JSON ऑब्जेक्ट को मूल रूप से समर्थन नहीं करते हैं।

आपके मामले में:

var array = [];
$("input[class=email]").each(function() {
    array.push({
        title: $(this).attr("title"),
        email: $(this).val()
    });
});
// then to get the JSON string
var jsonString = JSON.stringify(array);

10

यह मदद कर सकता है, मैं जहाँ भी संभव हो, शुद्ध जेएस पसंद करूंगा, यह प्रदर्शन में काफी सुधार करता है क्योंकि आपके पास बहुत सारे JQuery फ़ंक्शन कॉल नहीं होंगे।

var obj = [];
var elems = $("input[class=email]");

for (i = 0; i < elems.length; i += 1) {
    var id = this.getAttribute('title');
    var email = this.value;
    tmp = {
        'title': id,
        'email': email
    };

    obj.push(tmp);
}

बिग + 1 इस समाधान के साथ गया था स्वीकार किए गए उत्तर ने मुझे IE में कुछ मुद्दों का कारण बना दिया
Bobadevv

0

ऊपर के उदाहरण से समान - यदि आप सिर्फ json (वस्तु का एक सरणी नहीं) का उपयोग कर रहे हैं

function getJsonDetails() {
      item = {}
      item ["token1"] = token1val;
      item ["token2"] = token1val;
      return item;
}
console.log(JSON.stringify(getJsonDetails()))

यह आउटपुट प्रिंट होगा (एक वैध जसन के रूप में)

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