जावास्क्रिप्ट के माध्यम से गतिशील रूप से JSON ऑब्जेक्ट बनाएं (बिना संक्षिप्त स्ट्रिंग्स के)


130

मेरे पास यह JSON डेटा है:

{
    "employees": [
        {
            "firstName": "John",
            "lastName": "Doe"
        },
        {
            "firstName": "Anna",
            "lastName": "Smith"
        },
        {
            "firstName": "Peter",
            "lastName": "Jones"
        }
    ]
}

मान लीजिए कि मुझे नहीं पता कि मेरे पास कितने कॉलम और कर्मचारियों की पंक्तियाँ हैं, मैं इस ऑब्जेक्ट को जावास्क्रिप्ट में कैसे बनाऊंगा (बिना कंटेस्टेंट के)? मान लें कि मुझे "onGeneratedRow" विधि में प्रत्येक पंक्ति मिलती है, और मुझे प्रत्येक कॉलम (firstName, lastName) को '{}' कोष्ठक पर धकेलना होगा।

var viewData = { 
    employees : [] 
};

var rowNum = -1; 

function onGeneratedRow(columnsResult)
{
    rowNum = rowNum + 1;
    viewData.employees.push({});    
    columnsResult.forEach(function(column) {                  
    var columnName = column.metadata.colName;
    viewData.employees[rowNum][columnName] = column.value;  });
}

1
क्या है columnsResult? क्या है metadata?
जॉर्ज

1
यह प्रश्न वर्तमान में मेरे लिए मायने नहीं रखता है, क्या आप आगे बता सकते हैं कि आपका डेटा कहां से और किस प्रारूप में आ रहा है। क्या आप केवल मौजूदा डेटा को जोड़ रहे हैं या खरोंच से यह सब बना रहे हैं। हो सकता है कि आप यह दर्शाने के लिए एक jsfiddle बना सकें कि आपको क्या समस्या है। क्या आपका प्रश्न वास्तव में सिर्फ एक सरणी या जावास्क्रिप्ट ऑब्जेक्ट के भीतर डेटा तक पहुंचने का है? और डेटा के बारे में स्पष्ट होने देता है, JSON या जावास्क्रिप्ट ऑब्जेक्ट: stackoverflow.com/questions/8294088/javascript-object-vs-json
Xotic750

2
मान लें कि "कॉलमनाम" "FirstName" है और "column.value" मान है (उदाहरण के लिए: "जॉन")। मुझे सिर्फ यह जानने की जरूरत है कि उन्हें गतिशील रूप से कोष्ठक ('{}') में कैसे धकेल दिया
जाए

1
आपके द्वारा दिखाए गए कोड को चलाने पर क्या होता है?
nnnnnn

@ohadinho यह स्पष्ट नहीं है कि आपके इनपुट डेटा strucuture (json) क्या हैcolumnsResult
Kamil Kiełczewski

जवाबों:


154

यह वही चीज़ है जिसकी आपको आवश्यकता है!

function onGeneratedRow(columnsResult)
{
    var jsonData = {};
    columnsResult.forEach(function(column) 
    {
        var columnName = column.metadata.colName;
        jsonData[columnName] = column.value;
    });
    viewData.employees.push(jsonData);
 }

आपको कैसे पता चला कि ओपी को ´rowNum the के साथ पंक्तियों को गिनने की आवश्यकता नहीं है?
Xotic750

1
पुश को पंक्ति संख्या की आवश्यकता नहीं है
वकार आलमगीर

क्योंकि जेनसन पीढ़ी को गिनती की आवश्यकता नहीं है, अधिक आप हमेशा पंक्तियों का उपयोग करने के लिए .length का उपयोग कर सकते हैं।
वकार आलमगीर

5
मैंने कभी नहीं कहा कि JSON पीढ़ी करता है। यह अधिक मामला था कि आप "यह वही है जो आपको चाहिए"! आपका उत्तर JSON btw उत्पन्न नहीं करता है।
Xotic750

1
@AqarAlamgir - इस समय मुझे वास्तव में यही चाहिए। चीयर्स!
बोब.मोज़ो

96

शायद यह जानकारी आपकी मदद करेगी।

var sitePersonel = {};
var employees = []
sitePersonel.employees = employees;
console.log(sitePersonel);

var firstName = "John";
var lastName = "Smith";
var employee = {
  "firstName": firstName,
  "lastName": lastName
}
sitePersonel.employees.push(employee);
console.log(sitePersonel);

var manager = "Jane Doe";
sitePersonel.employees[0].manager = manager;
console.log(sitePersonel);

console.log(JSON.stringify(sitePersonel));


10

यह विषय, विशेष रूप से Xotic750 का उत्तर मेरे लिए बहुत उपयोगी था। मैं ajax का उपयोग करके इसे php स्क्रिप्ट में पारित करने के लिए एक json चर उत्पन्न करना चाहता था। मेरे मूल्य दो सरणियों में संग्रहीत किए गए थे, और मैं उन्हें json प्रारूप में चाहता था। यह एक सामान्य उदाहरण है:

valArray1 = [121, 324, 42, 31];
valArray2 = [232, 131, 443];
myJson = {objArray1: {}, objArray2: {}};
for (var k = 1; k < valArray1.length; k++) {
    var objName = 'obj' + k;
    var objValue = valArray1[k];
    myJson.objArray1[objName] = objValue;
}
for (var k = 1; k < valArray2.length; k++) {
    var objName = 'obj' + k;
    var objValue = valArray2[k];
    myJson.objArray2[objName] = objValue;
}
console.log(JSON.stringify(myJson));

कंसोल लॉग में परिणाम कुछ इस तरह होना चाहिए:

{
   "objArray1": {
        "obj1": 121,
        "obj2": 324,
        "obj3": 42,
        "obj4": 31
   },
   "objArray2": {
        "obj1": 232,
        "obj2": 131,
        "obj3": 443
  }
}

2
क्या मैं आपके द्वारा प्रस्तुत कोड को ठीक से रखने में उपयोगिता पर जोर दे सकता हूं? रिक्ति के बिना पढ़ना बहुत कठिन है।
केविन लुईस

1
इससे मुझे कोई अंत नहीं मिला। वास्तव में मुझे क्या चाहिए।
डेरेक

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