Câu trả lời:
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.
object["property"] = value;
JSON.stringify
.
console.log
là không dành cho tuần tự hóa. Sử dụng console.log(JSON. stringify(object))
.
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);
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.
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 };
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 đè.
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
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}}
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
}
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ọ.
a
là JSON,a.s
vì 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?