Tạo đối tượng JSON động thông qua JavaScript (Không có chuỗi liên kết)


130

Tôi có dữ liệu JSON này:

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

Giả sử tôi không biết mình có bao nhiêu cột và hàng nhân viên, làm cách nào để tạo đối tượng này trong JavaScript (Không có chuỗi liên kết)? Giả sử rằng tôi nhận được mỗi hàng trong phương thức "onGeneratedRow" và tôi cần đẩy từng cột (FirstName, lastName) vào dấu ngoặc '{}'.

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
columnsResultgì Là metadata
Georgia

1
Câu hỏi này hiện tại không có ý nghĩa với tôi, bạn có thể giải thích thêm, dữ liệu của bạn đến từ đâu và ở định dạng nào. Bạn chỉ cần thêm vào dữ liệu hiện có hoặc tạo tất cả dữ liệu từ đầu. Có lẽ bạn có thể tạo một jsfiddle để chứng minh vấn đề bạn đang gặp phải là gì. Câu hỏi của bạn thực sự chỉ là, làm thế nào để truy cập dữ liệu trong một đối tượng mảng / hoặc javascript? Và hãy rõ ràng về dữ liệu, đối tượng JSON hoặc Javascript: stackoverflow.com/questions/8294088/javascript-object-vs-json
Xotic750

2
giả sử "cộtName" là "tên đầu tiên" và "cột.value" là giá trị (ví dụ: "John"). Tôi chỉ cần biết cách đẩy chúng một cách linh hoạt vào dấu ngoặc ('{}')
ohadinho

1
Điều gì xảy ra khi bạn chạy mã bạn đã hiển thị?
nnnnnn

@ohadinho không rõ cấu trúc dữ liệu đầu vào của bạn là gì (json)columnsResult
Kamil Kiełczewski

Câu trả lời:


154

Đây là những gì bạn cần!

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

Làm thế nào bạn biết rằng OP không cần phải đếm các hàng với ´rowrowNum?
Xotic750

1
đẩy không cần số hàng
Waqar Alamgir

bởi vì thế hệ json không cần đếm, hơn nữa bạn luôn có thể sử dụng .length để lấy hàng.
Waqar Alamgir

5
Tôi chưa bao giờ nói rằng thế hệ JSON làm. Đó là nhiều hơn trường hợp bạn nói "Đây là những gì bạn cần!", Nhưng tôi muốn biết làm thế nào bạn biết rằng OP không cần thiết, hoặc bạn chỉ giả định? Câu trả lời của bạn không tạo ra JSON btw.
Xotic750

1
@WaqarAlamgir - đó chính xác là những gì tôi cần tại thời điểm này. Chúc mừng!
bob.mazzo

96

Có lẽ thông tin này sẽ giúp bạn.

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

Chủ đề này, đặc biệt là câu trả lời của Xotic750 rất hữu ích với tôi. Tôi muốn tạo một biến json để chuyển nó tới một tập lệnh php bằng cách sử dụng ajax. Giá trị của tôi được lưu trữ thành hai mảng và tôi muốn chúng ở định dạng json. Đây là một ví dụ chung:

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

Kết quả trong bảng điều khiển Log phải giống như thế này:

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

2
Tôi có thể nhấn mạnh tính hữu ích trong việc sắp xếp đúng mã bạn gửi ở đây không? Thật khó để đọc mà không có khoảng cách.
Kevin Lewis

1
Điều này giúp tôi không có kết thúc. Chính xác những gì tôi yêu cầu.
Derek

-1

JavaScript

var myObj = {
   id: "c001",
   name: "Hello Test"
}

Kết quả (JSON)

{
   "id": "c001",
   "name": "Hello Test"
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.