Thêm thuộc tính (phần tử) mới vào đối tượng JSON bằng JavaScript


439

Làm cách nào để thêm thuộc tính (phần tử) mới vào đối tượng JSON bằng JavaScript?

Câu trả lời:


628

JSON là viết tắt của ký hiệu đối tượng JavaScript. Một đối tượng JSON thực sự là một chuỗi chưa được biến thành đối tượng mà nó đại diện.

Để thêm một thuộc tính vào một đối tượng hiện có trong JS, bạn có thể làm như sau.

object["property"] = value;

hoặc là

object.property = value;

Nếu bạn cung cấp một số thông tin bổ sung như chính xác những gì bạn cần làm trong ngữ cảnh, bạn có thể nhận được câu trả lời phù hợp hơn.


6
@shanehoban ở đây alà JSON, a.svì chỉ cần xác định bởi bạn là một chuỗi. Bây giờ bạn đang cố gắng thêm ["subproperty"]vào một chuỗi. Bạn có hiểu tại sao bạn nhận được lỗi?
shivam

1
Đối với người mới bắt đầu, hãy nhớ rằng như Quintin nói, một "đối tượng" JSON hoàn toàn không phải là một đối tượng, nó chỉ là một chuỗi. Bạn sẽ cần phải chuyển đổi nó thành một đối tượng Javascript thực tế với JSON.parse () trước khi sử dụng ví dụ của anh ấy vềobject["property"] = value;
SpaceNinja

2
@shanehoban kiểm tra câu trả lời của tôi ở trên cùng và bạn sẽ thấy cách bạn có thể thêm nhiều thuộc tính cùng một lúc.
Victor Augusto

1
@EduardoLucio Đó là vì bạn nên sử dụng JSON.stringify.
Solomon Ucko

1
@EduardoLucio Vấn đề console.loglà không dành cho tuần tự hóa. Sử dụng console.log(JSON. stringify(object)).
Solomon Ucko

182
var jsonObj = {
    members: 
           {
            host: "hostName",
            viewers: 
            {
                user1: "value1",
                user2: "value2",
                user3: "value3"
            }
        }
}

var i;

for(i=4; i<=8; i++){
    var newUser = "user" + i;
    var newValue = "value" + i;
    jsonObj.members.viewers[newUser] = newValue ;

}

console.log(jsonObj);

6
Chỉ là những gì tôi đang tìm kiếm, thêm một yếu tố khi tên phải được xây dựng theo chương trình
quilkin 2/2/2015

4
ví dụ tuyệt vời. Điều này giúp tôi.
Ricky

152

Một đối tượng JSON chỉ đơn giản là một đối tượng javascript, vì vậy với Javascript là ngôn ngữ dựa trên nguyên mẫu, tất cả những gì bạn phải làm là giải quyết nó bằng cách sử dụng ký hiệu dấu chấm.

mything.NewField = 'foo';

Đó là nó, tôi yêu protoype javascript!
caglaror

70

cảm ơn vì bài viết này Tôi muốn thêm một cái gì đó có thể hữu ích.

Đối với IE, nó là tốt để sử dụng

object["property"] = value;

cú pháp vì một số từ đặc biệt trong IE có thể gây ra lỗi cho bạn.

Một ví dụ:

object.class = 'value';

Điều này không thành công trong IE, vì " class " là một từ đặc biệt. Tôi đã dành vài giờ với điều này.


@Sunil Garg Làm thế nào bạn sẽ lưu trữ giá trị đó khi còn nhỏ cho một số phụ huynh trong đối tượng ban đầu?
Jamie Corkhill

42

Với ECMAScript từ năm 2015, bạn có thể sử dụng Syntax lây lan (cách ba chấm):

let  people = { id: 4 ,firstName: 'John'};
people = { ...people, secondName: 'Fogerty'};

Nó cho phép bạn thêm các đối tượng phụ:

people = { ...people, city: { state: 'California' }};

kết quả sẽ là:

{  
   "id": 4,
   "firstName": "John",
   "secondName": "Forget",
   "city": {  
      "state": "California"
   }
}

Bạn cũng có thể hợp nhất các đối tượng:

var mergedObj = { ...obj1, ...obj2 };

13

Bạn cũng có thể dùng Object.assign từ ECMAScript 2015. Nó cũng cho phép bạn thêm các thuộc tính lồng nhau cùng một lúc. Ví dụ:

const myObject = {};

Object.assign(myObject, {
    firstNewAttribute: {
        nestedAttribute: 'woohoo!'
    }
});

Ps: Điều này sẽ không ghi đè lên đối tượng hiện có với các thuộc tính được gán. Thay vào đó họ sẽ được thêm vào. Tuy nhiên, nếu bạn gán một giá trị cho một thuộc tính hiện có thì nó sẽ bị ghi đè.


7
extend: function(){
    if(arguments.length === 0){ return; }
    var x = arguments.length === 1 ? this : arguments[0];
    var y;

    for(var i = 1, len = arguments.length; i < len; i++) {
        y = arguments[i];
        for(var key in y){
            if(!(y[key] instanceof Function)){
                x[key] = y[key];
            }
        }           
    };

    return x;
}

Mở rộng nhiều đối tượng json (bỏ qua các hàm):

extend({obj: 'hej'}, {obj2: 'helo'}, {obj3: {objinside: 'yes'}});

Sẽ dẫn đến một đối tượng json duy nhất


2

Bạn cũng có thể thêm các đối tượng json mới vào json của mình, bằng cách sử dụng chức năng mở rộng ,

var newJson = $.extend({}, {my:"json"}, {other:"json"});
// result -> {my: "json", other: "json"}

Một tùy chọn rất tốt cho chức năng mở rộng là hợp nhất đệ quy. Chỉ cần thêm giá trị thực làm tham số đầu tiên (đọc tài liệu để có thêm tùy chọn). Thí dụ,

var newJson = $.extend(true, {}, {
    my:"json",
    nestedJson: {a1:1, a2:2}
}, {
    other:"json",
    nestedJson: {b1:1, b2:2}
});
// result -> {my: "json", other: "json", nestedJson: {a1:1, a2:2, b1:1, b2:2}}

2

Bạn cũng có thể tự động thêm các thuộc tính với các biến trực tiếp trong một đối tượng bằng chữ.

const amountAttribute = 'amount';
const foo = {
                [amountAttribute]: 1
            };
foo[amountAttribute + "__more"] = 2;

Kết quả trong:

{
    amount: 1, 
    amount__more: 2
}

0

Công dụng $.extend()của jquery , như thế này:

token = {_token:window.Laravel.csrfToken};
data = {v1:'asdass',v2:'sdfsdf'}
dat = $.extend(token,data); 

Tôi hy vọng bạn phục vụ họ.

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.