2009-04-10 79 views

Trả lời

485

JSON là viết tắt của JavaScript Object Notation. 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 thuộc tính vào đối tượng hiện có trong JS, bạn có thể thực hiện các thao tác sau.

object["property"] = value; 

hoặc

object.property = value; 

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

+0

là điều này có thể: đối tượng ["property"] ["subProperty"] ... điều đó thật tuyệt vời. Vừa thử. var a.s = "cái gì"; như.d = "nope"; Nó không được xác định: ( – shanehoban

+6

@shanehoban ở đây 'a' là JSON,' như' như được định nghĩa 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ây giờ bạn có hiểu tại sao không u có lỗi không? – shivam

+0

@shivam Vâng, xin cám ơn rất nhiều! – shanehoban

120

Đối tượng JSON đơn giản là đố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 ký hiệu chấm.

mything.NewField = 'foo'; 
+0

Đó là nó, tôi thích protoype javascript! – caglaror

+1

điều này phải được chấp nhận trả lời – CyprUS

42

Xin chào, cảm ơn bài đăng này. Tôi muốn thêm cái gì đó có thể hữu ích.

Đối với IE, tốt nhất là sử dụng cú pháp object["property"] = value; vì một số từ đặc biệt trong IE có thể cho bạn lỗi. Ví dụ: object.class = 'value'; điều này không thành công trong IE, bởi vì "lớp" là một từ đặc biệt. Tôi đã dành vài giờ với điều này ................!

132
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); 
+10

+1 cho ví dụ được đưa ra. – sunleo

+3

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

-11
for(var i=0;i<JsonObject.length;i++){ 
        alert("inside forloop"); 
        var dataArray = JsonObject[i]; 
        alert(dataArray["data"]); 

      } 
5
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 chức năng):

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

sẽ dẫn đến một đối tượng json đơn

2

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

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

Tùy chọn rất tốt cho chức năng mở rộng là phép hợp nhất đệ quy. Chỉ cần thêm giá trị thực như tham số đầu tiên (đọc tài liệu để có thêm tùy chọn). Ví 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}} 
-1

Sử 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ọ.

8

Bạn cũng có thể sử 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 thuộc tính được chỉ định. Thay vào đó chúng 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 đè.

Các vấn đề liên quan