通过JavaScript动态创建JSON对象(无连接字符串)


130

我有以下JSON数据:

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

假设我不知道我有多少列员工,如何在JavaScript中创建此对象(没有连接字符串)?假设我使用“ 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来演示您遇到的问题。您的问题真的只是在数组/或javascript对象中如何访问数据吗?并且让我们弄清楚数据,JSON或Javascript对象:stackoverflow.com/questions/8294088/javascript-object-vs-json
Xotic750 2013年

2
假设“ columnName”是“ firstName”,“ column.value”是值(例如:“ John”)。我只需要知道如何将它们动态地放入括号('{}')
ohadinho,2013年

1
运行显示的代码会怎样?
nnnnnn

@ohadinho,目前尚不清楚您的输入数据结构是什么(json)columnsResult
卡米尔·基列夫斯基

Answers:


154

这就是您所需要的!

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

您怎么知道OP不需要用“ rowNum”对行进行计数?
Xotic750

1
推送不需要行号
Waqar Alamgir

因为json生成不需要计数,所以您可以始终使用.length来获取更多行。
Waqar Alamgir

5
我从未说过JSON生成确实如此。您说“这就是您所需要的!”的情况更多,但我想知道您如何知道OP不需要计数,或者您只是假设?您的答案不会生成JSON btw。
Xotic750

1
@WaqarAlamgir-这正是我目前需要的。干杯!
bob.mazzo 2014年

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的答案对我很有帮助。我想生成一个json变量,以使用ajax将其传递给php脚本。我的值存储在两个数组中,我希望它们采用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
这无休止地帮助了我。正是我所需要的。
Derek

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.