2013-05-12 6 views
83

मैं इस JSON डेटा है (concate तार के बिना):JSON ऑब्जेक्ट बनाएँ जावास्क्रिप्ट के माध्यम से गतिशील

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

मान लीजिए मैं नहीं जानता कि कितने कॉलम और कर्मचारियों मेरे पास है की पंक्तियों, मैं कैसे में इस वस्तु बना सकता हूँ जावास्क्रिप्ट (समेकित तारों के बिना)? मान लें कि मुझे "ऑन जेनरेटेड" विधि में प्रत्येक पंक्ति मिलती है, और मुझे प्रत्येक कॉलम (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' है यह एक सामान्य उदाहरण है? 'मेटाडेटा 'क्या है? – georg

+0

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

+1

मान लें "कॉलमनाम" "firstName" और "column.value" मान है (उदाहरण के लिए: "जॉन")। मुझे बस यह जानने की जरूरत है कि उन्हें गतिशील रूप से ब्रैकेट में कैसे दबाया जाए ('{}') – ohadinho

उत्तर

103

यही आपको चाहिए!

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

आप कैसे जानते थे कि ओपी को'rowNum 'के साथ पंक्तियों की गणना करने की आवश्यकता नहीं है? – Xotic750

+1

पुश को पंक्ति संख्या –

+3

की आवश्यकता नहीं है मैंने कभी नहीं कहा था। – Xotic750

54

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

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));

3

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

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 
    } 
} 
+1

क्या मैं यहां सबमिट किए गए कोड को ठीक से स्थानांतरित करने में उपयोगिता पर दबाव डाल सकता हूं? बिना अंतर के पढ़ने के लिए यह बहुत कठिन है। –

+0

इससे मुझे कोई अंत नहीं हुआ। वास्तव में मुझे क्या चाहिए। – Derek

संबंधित मुद्दे