jquery

2013-02-21 38 views
62

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

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

<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: '[email protected]'}, {title: PROD, email: '[email protected]'},{title: DEV, email: '[email protected]'}] 

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

इस स्थिति पर किसी भी प्रकाश शेड की सराहना की जाएगी!

उत्तर

196
इस तरह

:

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":"[email protected]"},{"title":"PROD","email":"[email protected]"},{"title":"DEV","email":"[email protected]"}] 
+0

में कुछ मुद्दों की वजह से आपको बहुत बहुत धन्यवाद। – BaconJuice

+0

इन 3 उदाहरणों में क्यों मुझे हमेशा यह मिलता है? 'Uncaught ReferenceError: jsonObj परिभाषित नहीं किया गया है' – Gino

+0

@ जीनो क्या आपने पेस्ट या टाइप कॉपी किया था? जेसनओबीजे को परिभाषित करने वाली रेखा देखें। – ATOzTOA

8

इससे मदद मिलेगी, मैं जहां भी संभव हो शुद्ध जेएस पसंद करूंगा, यह प्रदर्शन में काफी सुधार करता है क्योंकि आपके पास बहुत सारे 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); 
} 
+0

बिग +1 इस समाधान के साथ चला गया स्वीकार किए जाते हैं जवाब मुझे आईई – Bobadevv

9

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

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

अधिक जानकारी के लिए 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);