Nếu tôi chuyển đổi đối tượng trên thành JSON bằng cách sử dụng var jSonString = JSON.stringify(testObject);
, sự khác biệt giữa 2 (JS obj và JSON) là gì?
JSON là một định dạng trao đổi dữ liệu. Đó là một tiêu chuẩn mô tả cách các danh sách được sắp xếp và các bản đồ không được sắp xếp, các chuỗi booleans và số có thể được biểu diễn trong một chuỗi. Giống như XML và YAML là một cách để truyền thông tin có cấu trúc giữa các ngôn ngữ, JSON là như nhau. Mặt khác, một đối tượng JavaScript là một kiểu vật lý. Giống như một mảng PHP, một lớp / cấu trúc C ++, một đối tượng JavaScript là một kiểu bên trong của JavaScript.
Đây là một câu chuyện. Hãy tưởng tượng bạn đã mua một số đồ nội thất từ một cửa hàng và bạn muốn nó được giao. Tuy nhiên, cái duy nhất còn lại trong kho là model hiển thị, nhưng bạn đồng ý mua nó.
Trong cửa hàng, các ngăn kéo bạn đã mua là một vật thể sống:
var chestOfDrawers = {
color: "red",
numberOfDrawers: 4
}
Tuy nhiên, bạn không thể gửi một ngăn kéo trong bài viết, vì vậy bạn tháo dỡ nó (đọc, xâu chuỗi nó). Bây giờ nó vô dụng về mặt nội thất. Bây giờ là JSON. Nó ở dạng gói phẳng.
{"color":"red","numberOfDrawers":4}
Khi bạn nhận được nó, sau đó bạn xây dựng lại các ngăn kéo (đọc, phân tích nó). Bây giờ nó trở lại trong một hình thức đối tượng.
Lý do đằng sau JSON / XML và YAML là để cho phép dữ liệu được chuyển giữa các ngôn ngữ lập trình theo định dạng mà cả hai ngôn ngữ tham gia đều có thể hiểu được; bạn không thể cung cấp trực tiếp cho PHP hoặc C ++ đối tượng JavaScript của mình; bởi vì mỗi ngôn ngữ đại diện cho một đối tượng khác nhau. Tuy nhiên, vì chúng tôi đã xâu chuỗi đối tượng thành ký hiệu JSON; tức là một cách tiêu chuẩn hóa để biểu diễn dữ liệu, chúng ta có thể truyền biểu diễn JSON của đối tượng sang một ngôn ngữ khác (C ++, PHP), họ có thể tạo lại đối tượng JavaScript mà chúng ta có vào đối tượng của chính họ dựa trên biểu diễn JSON của đối tượng.
Điều quan trọng cần lưu ý là JSON không thể biểu thị các hàm hoặc ngày. Nếu bạn cố gắng xâu chuỗi một đối tượng với một thành viên hàm, hàm sẽ bị bỏ qua khỏi biểu diễn JSON. Một ngày sẽ được chuyển đổi thành một chuỗi;
JSON.stringify({
foo: new Date(),
blah: function () {
alert('hello');
}
}); // returns the string "{"foo":"2011-11-28T10:21:33.939Z"}"