लूप के लिए जावास्क्रिप्ट द्वारा json कैसे बनाएं?


99

मैं सरणी का चयन टैग की।

<select id='uniqueID' name="status">
      <option value="1">Present</option>
      <option value="2">Absent</option>
 </select>

और मैं जावास्क्रिप्ट में दो फ़ील्ड्स 'यूनिकफॉफ़्सलेक्ट और ऑप्शनवैल्यू' वाले एक जोंस ऑब्जेक्ट बनाना चाहता हूं।

मैं getElementsByName ("स्थिति") का उपयोग करता हूं और मैं इस पर पुनरावृति करता हूं।

संपादित करें

मुझे आउट पुट की जरूरत है

[{"selectID":2,"OptionValue":"2"},
{"selectID":4,"optionvalue":"1"}]

और इसी तरह...


मुझे लगता है कि विकल्पवैल्यू प्रत्येक 'विकल्प' तत्व का 'मूल्य' गुण होना चाहिए: 1, 2, आदि। लेकिन आईडी क्या है? क्या यह पाठ है? "वर्तमान", "अनुपस्थित", आदि?
सिस्टम PAUSE

ठीक है, इसलिए यदि आईडी चयन का यूनिकआईडी है, तो केवल एक ही विकल्प हो सकता है, सही? मुझे लगता है कि आप वर्तमान चयन चाहते हैं, और सभी चयनों की एक सरणी नहीं है?
सिस्टम PAUSE

जवाबों:


174

आपके अनुरोध को मैं जो समझता हूं, उससे यह काम करना चाहिए:

<script>
//  var status  = document.getElementsByID("uniqueID"); // this works too
var status  = document.getElementsByName("status")[0];
var jsonArr = [];

for (var i = 0; i < status.options.length; i++) {
    jsonArr.push({
        id: status.options[i].text,
        optionValue: status.options[i].value
    });
}
</script>

41
JSON एक ऑब्जेक्ट है न कि एक अरै।
गुम्बो

यह json object array बनाता है। लेकिन मुझे केवल एक json ऑब्जेक्ट चाहिए।
विकास

1
आपको var jsonObj = new Array () की तरह सरणी घोषित करने की आवश्यकता नहीं है; cuz आपके उदाहरण ने मेरे लिए काम नहीं किया। जब मैं नए ऐरे () में बदलता हूं, तो यह काम करता है।
मेव

18
var jsonArr = [];एक नया ऐरे बनाता है। var jsonObj = {};
b_dubb

तो, गूंगा सवाल, मैं वस्तुओं की एक सरणी और एक वस्तु के बीच का अंतर जानता हूं जिसमें वस्तुओं की एक सरणी होती है (बहुत ज्यादा, इस पोस्ट में jsonArr = []और बीच का अंतर jsonObj = {})। मेरे पास, शायद बहुत बार, और शायद गलती से भी, एक ऐसी वस्तु के लिए संदर्भित किया जाता है जिसमें वस्तुओं की एक सरणी होती है जो प्रत्येक "संभवतः JSON ऑब्जेक्ट" के रूप में अलग-अलग नाम / मूल्य जोड़े रखती है। सरल JSON सिंटैक्स से परिचित होने के नाते (जैसे कि आपके पास वास्तविक .jsonफ़ाइल में क्या होगा ), मुझे पता है कि वाक्यात्मक रूप से यह अलग है। तो, क्या आप केवल JSON जैसी वस्तुओं की सरणी को संदर्भित करेंगे?
VoidKing


8

यदि आप निम्न के रूप में एक एकल जावास्क्रिप्ट वस्तु चाहते हैं:

{ uniqueIDofSelect: "uniqueID", optionValue: "2" }

(जहां विकल्प 2, "अनुपस्थित", वर्तमान चयन है) तो निम्नलिखित कोड को इसका उत्पादन करना चाहिए:

  var jsObj = null;
  var status = document.getElementsByName("status")[0];
  for (i = 0, i < status.options.length, ++i) {
     if (options[i].selected ) {
        jsObj = { uniqueIDofSelect: status.id, optionValue: options[i].value };
        break;
     }
  }

यदि आप ऐसी सभी वस्तुओं की एक सरणी चाहते हैं (न कि केवल एक चयनित), तो माइकल कोड का उपयोग करें, लेकिन इसके status.options[i].textलिए स्वैप करें status.id

यदि आप एक स्ट्रिंग चाहते हैं जिसमें चयनित ऑब्जेक्ट का JSON प्रतिनिधित्व है, तो इसके बजाय इसका उपयोग करें:

  var jsonStr = "";
  var status = document.getElementsByName("status")[0];
  for (i = 0, i < status.options.length, ++i) {
     if (options[i].selected ) {
        jsonStr = '{ '
                  + '"uniqueIDofSelect" : '
                  + '"' + status.id + '"'
                  + ", "
                  + '"optionValue" : '
                  + '"'+ options[i].value + '"'
                  + ' }';
        break;
     }
  }

3

अगर मैं लूप के लिए उत्पन्न स्ट्रिंग से जावास्क्रिप्ट ऑब्जेक्ट बनाना चाहता हूं, तो मैं JSON टू ऑब्जेक्ट दृष्टिकोण होगा। मैं लूप के लिए पुनरावृति करके JSON स्ट्रिंग उत्पन्न करेगा और फिर JSON को ऑब्जेक्ट के मूल्यांकन के लिए किसी भी लोकप्रिय जावास्क्रिप्ट फ्रेमवर्क का उपयोग करेगा।

मैंने प्रोटोटाइप जावास्क्रिप्ट फ्रेमवर्क का उपयोग किया है । मैं कुंजी और मूल्यों के साथ दो सरणी है। मैं पाश के लिए पुनरावृति करता हूं और वैध JSON स्ट्रिंग उत्पन्न करता हूं। मैं JSON स्ट्रिंग को जावास्क्रिप्ट ऑब्जेक्ट में बदलने के लिए evalJSON () फ़ंक्शन का उपयोग करता हूं

यहाँ उदाहरण कोड है। अपने फायरबग कंसोल पर ट्रायआउट करें

var key = ["color", "size", "fabric"];
var value = ["Black", "XL", "Cotton"];

var json = "{ ";
for(var i = 0; i < key.length; i++) {
    (i + 1) == key.length ? json += "\"" + key[i] + "\" : \"" + value[i] + "\"" : json += "\"" + key[i] + "\" : \"" + value[i] + "\",";
}
json += " }";
var obj = json.evalJSON(true);
console.log(obj);

1
धन्यवाद आदमी इसने मेरी बहुत मदद की है, मैंने jsonstring.evalJSON (true) के बजाय PARSE.json (jsonstring) का उपयोग किया है;
अरनौद बाउचोट

0

आपका प्रश्न डिकोड करना बहुत कठिन है, लेकिन मैं इस पर एक छुरा लेने की कोशिश करूँगा।

तुम कहो:

मैं एक जावास्क्रिप्ट ऑब्जेक्ट बनाना चाहता हूं जिसमें दो फ़ील्ड हैं uniqueIDofSelectऔर optionValueजावास्क्रिप्ट में हैं।

और फिर आप कहते हैं:

मुझे जैसे आउटपुट चाहिए

[{"selectID":2,"optionValue":"2"},
{"selectID":4,"optionvalue":"1"}]

खैर, इस उदाहरण के उत्पादन में नाम का क्षेत्र नहीं है uniqueIDofSelect, यह केवल है optionValue

वैसे भी, आप वस्तुओं की सरणी के लिए पूछ रहे हैं ...

फिर माइकल्स को टिप्पणी में उत्तर दें:

यह json object array बनाता है। लेकिन मुझे केवल एक json ऑब्जेक्ट चाहिए।

तो आप वस्तुओं की एक सरणी नहीं चाहते हैं?

फिर तुम क्या चाहते हो?

कृपया अपना मन बना लें।


पहली बात: क्षमा करें कि uniqueIDofSelect == selectID (Id of select element), मैं अपने रिकॉर्ड की आईडी को select एलिमेंट आईडी (रिकॉर्ड अपडेट पर्पस के रूप में) रख सकता हूं। मेरे पास foreach loop द्वारा उत्पन्न चुनिंदा तत्व की संख्या भी होगी। वास्तव में यह लूप है। जो हम Enumerable ऑब्जेक्ट्स को प्रदर्शित करने के लिए asp.net MVC में उपयोग कर रहे हैं। 2) आप सही हैं, मेरी गलती है कि मैं यह कह रहा था कि संपूर्ण आउटपुट एक json ऑब्जेक्ट है। लेकिन यह वस्तु की वास्तविक सरणी है। और इसलिए माइकल का जवाब एकदम सही है। इंगित करने के लिए धन्यवाद।
विकास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.