JSON (Ký hiệu đối tượng JavaScript) là một định dạng nhẹ được sử dụng để trao đổi dữ liệu. Nó dựa trên một tập hợp con của ngôn ngữ JavaScript (cách các đối tượng được xây dựng bằng JavaScript). Như đã nêu trong MDN , một số JavaScript không phải là JSON và một số JSON không phải là JavaScript.
Một ví dụ về nơi này được sử dụng là phản hồi dịch vụ web. Vào thời xưa, các dịch vụ web đã sử dụng XML làm định dạng dữ liệu chính của chúng để truyền dữ liệu trở lại, nhưng kể từ khi JSON xuất hiện ( Định dạng JSON được chỉ định trong RFC 4627 bởi Douglas Crockford ), nó đã được định dạng ưa thích vì nó nhiều hơn nhẹ
Bạn có thể tìm thấy nhiều thông tin hơn trên trang web JSON chính thức .
JSON được xây dựng trên hai cấu trúc:
- Một bộ sưu tập các cặp tên / giá trị. Trong các ngôn ngữ khác nhau, điều này được nhận ra dưới dạng một đối tượng, bản ghi, cấu trúc, từ điển, bảng băm, danh sách khóa hoặc mảng kết hợp.
- Một danh sách sắp xếp các giá trị. Trong hầu hết các ngôn ngữ, điều này được nhận ra dưới dạng một mảng, vectơ, danh sách hoặc chuỗi.
Cấu trúc JSON
Đây là một ví dụ về dữ liệu JSON:
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
JSON trong JavaScript
JSON (trong Javascript) là một chuỗi!
Mọi người thường cho rằng tất cả các đối tượng Javascript là JSON và JSON là đối tượng Javascript. Điều này là không chính xác.
Trong Javascript không phảivar x = {x:y}
là JSON , đây là một đối tượng Javascript . Cả hai không giống nhau. Tương đương JSON (được biểu thị bằng ngôn ngữ Javascript) sẽ là var x = '{"x":"y"}'
. x
là một đối tượng của chuỗi kiểu không phải là một đối tượng theo quyền riêng của nó. Để tắt chức năng này vào một đối tượng Javascript đủ lông đủ cánh trước tiên bạn phải phân tích nó, var x = JSON.parse('{"x":"y"}');
, x
bây giờ là một đối tượng nhưng đây không phải là JSON nữa.
Xem đối tượng Javascript Vs JSON
Khi làm việc với JSON và JavaScript, bạn có thể muốn sử dụng eval
hàm để đánh giá kết quả được trả về trong cuộc gọi lại, nhưng điều này không được đề xuất vì có hai ký tự (U + 2028 & U + 2029) hợp lệ trong JSON nhưng không có trong JavaScript (đọc thêm về điều này ở đây ).
Do đó, người ta phải luôn cố gắng sử dụng tập lệnh của Crockford để kiểm tra JSON hợp lệ trước khi đánh giá nó. Liên kết đến phần giải thích tập lệnh được tìm thấy ở đây và đây là một liên kết trực tiếp đến tập tin js. Mỗi trình duyệt lớn hiện nay đều có cách thực hiện riêng cho việc này.
Ví dụ về cách sử dụng trình phân tích cú pháp JSON (với json từ đoạn mã trên):
//The callback function that will be executed once data is received from the server
var callback = function (result) {
var johnny = JSON.parse(result);
//Now, the variable 'johnny' is an object that contains all of the properties
//from the above code snippet (the json example)
alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};
Trình phân tích cú pháp JSON cũng cung cấp một phương thức rất hữu ích khác stringify
. Phương thức này chấp nhận một đối tượng JavaScript làm tham số và xuất ra một chuỗi có định dạng JSON. Điều này hữu ích khi bạn muốn gửi dữ liệu trở lại máy chủ:
var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}
Hai phương thức trên ( parse
và stringify
) cũng lấy tham số thứ hai, đó là một hàm sẽ được gọi cho mọi khóa và giá trị ở mọi cấp của kết quả cuối cùng và mỗi giá trị sẽ được thay thế bằng kết quả của hàm được nhập. (Thêm về điều này ở đây )
Btw, đối với tất cả các bạn ngoài kia, những người nghĩ rằng JSON chỉ dành cho JavaScript, hãy xem bài đăng này giải thích và xác nhận khác.
Người giới thiệu