Giới thiệu về JSON
JSON - viết tắt của JavaScript Object Notation - là một định dạng để chia sẻ dữ liệu. Đúng như tên gọi của nó, JSON có nguồn root từ ngôn ngữ lập trình JavaScript, nhưng nó có sẵn để sử dụng bởi nhiều ngôn ngữ bao gồm Python, Ruby, PHP và Java. JSON thường được phát âm giống như tên “Jason”. JSON sử dụng phần mở rộng .json
khi nó đứng một mình. Khi nó được xác định ở định dạng file khác (như trong .html
), nó có thể xuất hiện bên trong dấu ngoặc kép dưới dạng chuỗi JSON hoặc có thể là một đối tượng được gán cho một biến. Định dạng này dễ dàng truyền giữa web server và client hoặc trình duyệt.
Rất dễ đọc và nhẹ, JSON cung cấp một giải pháp thay thế tốt cho XML và yêu cầu ít định dạng hơn nhiều. Hướng dẫn thông tin này sẽ giúp bạn cập nhật dữ liệu bạn có thể sử dụng trong các file JSON cũng như cấu trúc và cú pháp chung của định dạng này.
Cú pháp và cấu trúc
Đối tượng JSON là định dạng dữ liệu key-value thường được hiển thị trong dấu ngoặc nhọn. Khi làm việc với JSON, bạn có thể sẽ thấy các đối tượng JSON trong file .json
, nhưng chúng cũng có thể tồn tại dưới dạng một đối tượng hoặc chuỗi JSON trong ngữ cảnh của chương trình.
Một đối tượng JSON trông giống như sau:
{ "first_name" : "Sammy", "last_name" : "Shark", "location" : "Ocean", "online" : true, "followers" : 987 }
Mặc dù đây là một ví dụ rất ngắn và JSON có thể dài nhiều dòng, nhưng điều này cho thấy rằng định dạng thường được cài đặt với hai dấu ngoặc nhọn (hoặc dấu ngoặc nhọn) trông như thế này { }
ở hai đầu của nó và với key- các cặp giá trị điền khoảng cách giữa. Hầu hết dữ liệu được sử dụng trong JSON sẽ được đóng gói trong một đối tượng JSON.
Các cặp key-value có dấu hai chấm giữa chúng như trong "key" : "value"
. Mỗi cặp key-value được phân tách bằng dấu phẩy, do đó, phần giữa của JSON trông giống như sau: "key" : "value", "key" : "value", "key": "value"
. Trong ví dụ của ta ở trên, cặp key-value đầu tiên là "first_name" : "Sammy"
.
Các khóa JSON nằm ở phía bên trái của dấu hai chấm. Chúng cần được đặt trong dấu ngoặc kép, như trong "key"
và có thể là bất kỳ chuỗi hợp lệ nào. Trong mỗi đối tượng, các khóa cần phải là duy nhất. Các chuỗi khóa này có thể bao gồm khoảng trắng, như trong "first name"
, nhưng điều đó có thể khiến việc truy cập khó hơn khi bạn đang lập trình, vì vậy tốt nhất bạn nên sử dụng dấu gạch dưới, như trong "first_name"
.
Các giá trị JSON được tìm thấy ở bên phải của dấu hai chấm. Ở cấp độ chi tiết, chúng phải là một trong 6 kiểu dữ liệu đơn giản:
- dây
- con số
- các đối tượng
- mảng
- Booleans (đúng hoặc sai)
- vô giá trị
Ở cấp độ rộng hơn, các giá trị cũng có thể được tạo thành từ các kiểu dữ liệu phức tạp của đối tượng hoặc mảng JSON, được đề cập trong phần tiếp theo .
Mỗi kiểu dữ liệu được chuyển vào dưới dạng giá trị vào JSON sẽ duy trì cú pháp riêng của chúng, vì vậy chuỗi sẽ nằm trong dấu ngoặc kép, nhưng số sẽ không.
Mặc dù trong các file .json
, ta thường thấy định dạng được mở rộng qua nhiều dòng, JSON cũng có thể được viết tất cả trong một dòng.
{ "first_name" : "Sammy", "last_name": "Shark", "online" : true, }
Điều này sẽ phổ biến hơn trong một loại file khác hoặc khi bạn gặp một chuỗi JSON.
Viết định dạng JSON trên nhiều dòng thường làm cho nó dễ đọc hơn nhiều, đặc biệt là khi xử lý một tập dữ liệu lớn. Vì JSON bỏ qua khoảng trắng giữa các phần tử của nó, bạn có thể xóa dấu hai chấm và các cặp key-value của bạn để làm cho dữ liệu thậm chí còn dễ đọc hơn cho con người:
{ "first_name" : "Sammy", "last_name" : "Shark", "online" : true }
Điều quan trọng cần lưu ý là mặc dù chúng trông giống nhau, nhưng một đối tượng JSON không có cùng định dạng với một đối tượng JavaScript , do đó, mặc dù bạn có thể sử dụng các hàm trong các đối tượng JavaScript, nhưng bạn không thể sử dụng chúng làm giá trị trong JSON. Thuộc tính quan trọng nhất của JSON là nó có thể được chuyển dễ dàng giữa các ngôn ngữ lập trình ở định dạng mà tất cả các ngôn ngữ tham gia đều có thể hoạt động. Các đối tượng JavaScript chỉ có thể được làm việc trực tiếp thông qua ngôn ngữ lập trình JavaScript.
Cho đến nay ta đã xem xét định dạng JSON theo những thuật ngữ đơn giản nhất của nó, nhưng JSON có thể trở nên phân cấp và phức tạp, bao gồm các đối tượng và mảng lồng nhau. Ta sẽ xem xét JSON phức tạp hơn trong phần tiếp theo.
Làm việc với các kiểu phức tạp trong JSON
JSON có thể lưu trữ các đối tượng lồng nhau ở định dạng JSON ngoài các mảng lồng nhau. Các đối tượng và mảng này sẽ được chuyển dưới dạng các giá trị được gán cho các khóa và thường cũng sẽ bao gồm các cặp key-value .
Đối tượng lồng nhau
Trong file users.json
bên dưới, đối với mỗi người trong số bốn user ( "sammy"
, "jesse"
, "drew"
, "jamie"
) có một đối tượng JSON lồng nhau được chuyển làm giá trị cho từng user , với khóa lồng nhau của "username"
và "location"
liên quan đến từng user . Đối tượng JSON lồng nhau đầu tiên được đánh dấu bên dưới.
{ "sammy" : { "username" : "SammyShark", "location" : "Indian Ocean", "online" : true, "followers" : 987 }, "jesse" : { "username" : "JesseOctopus", "location" : "Pacific Ocean", "online" : false, "followers" : 432 }, "drew" : { "username" : "DrewSquid", "location" : "Atlantic Ocean", "online" : false, "followers" : 321 }, "jamie" : { "username" : "JamieMantisShrimp", "location" : "Pacific Ocean", "online" : true, "followers" : 654 } }
Trong ví dụ trên, dấu ngoặc nhọn được sử dụng xuyên suốt để tạo thành một đối tượng JSON lồng nhau với tên user và dữ liệu vị trí được liên kết cho mỗi người trong số bốn user . Cũng giống như bất kỳ giá trị nào khác, khi sử dụng các đối tượng, dấu phẩy được sử dụng để phân tách các phần tử.
Mảng lồng nhau
Dữ liệu cũng có thể được lồng trong định dạng JSON bằng cách sử dụng các mảng JavaScript được truyền dưới dạng giá trị. JavaScript sử dụng dấu ngoặc vuông [ ]
ở một trong hai đầu của kiểu mảng của nó. Mảng là các tập hợp có thứ tự và có thể chứa các giá trị của các kiểu dữ liệu khác nhau.
Ta có thể sử dụng một mảng khi ta đang xử lý nhiều dữ liệu có thể dễ dàng được group lại với nhau, như khi có nhiều trang web và profile mạng xã hội khác nhau được liên kết với một user .
Với mảng lồng nhau đầu tiên được đánh dấu, profile user cho Sammy có thể trông giống như sau:
{ "first_name" : "Sammy", "last_name" : "Shark", "location" : "Ocean", "websites" : [ { "description" : "work", "URL" : "https://www.digitalocean.com/" }, { "desciption" : "tutorials", "URL" : "https://www.digitalocean.com/community/tutorials" } ], "social_media" : [ { "description" : "twitter", "link" : "https://twitter.com/digitalocean" }, { "description" : "facebook", "link" : "https://www.facebook.com/DigitalOceanCloudHosting" }, { "description" : "github", "link" : "https://github.com/digitalocean" } ] }
Khóa "websites"
và khóa "social_media"
sử dụng một mảng để lồng thông tin thuộc 2 liên kết trang web và 3 liên kết profile mạng xã hội của Sammy. Ta biết rằng đó là các mảng do sử dụng dấu ngoặc vuông.
Việc sử dụng lồng trong định dạng JSON của ta cho phép ta làm việc với dữ liệu phân cấp và phức tạp hơn.
So sánh với XML
XML , hay e X tensible M arkup L anguage, là một cách để lưu trữ dữ liệu có thể truy cập được mà cả con người và máy móc đều có thể đọc được. Định dạng XML có sẵn để sử dụng trên nhiều ngôn ngữ lập trình.
Theo nhiều cách, XML rất giống với JSON, nhưng nó đòi hỏi nhiều văn bản hơn nên có độ dài dài hơn và tốn nhiều thời gian hơn để đọc và viết. XML phải được phân tích cú pháp bằng trình phân tích cú pháp XML, nhưng JSON có thể được phân tích cú pháp bằng một hàm tiêu chuẩn. Cũng không giống như JSON, XML không thể sử dụng mảng.
Ta sẽ xem xét một ví dụ về định dạng XML và sau đó xem xét cùng một dữ liệu được hiển thị trong JSON.
<users> <user> <username>SammyShark</username> <location>Indian Ocean</location> </user> <user> <username>JesseOctopus</username> <location>Pacific Ocean</location> </user> <user> <username>DrewSquir</username> <location>Atlantic Ocean</location> </user> <user> <username>JamieMantisShrimp</username> <location>Pacific Ocean</location> </user> </users>
{"users": [ {"username" : "SammyShark", "location" : "Indian Ocean"}, {"username" : "JesseOctopus", "location" : "Pacific Ocean"}, {"username" : "DrewSquid", "location" : "Atlantic Ocean"}, {"username" : "JamieMantisShrimp", "location" : "Pacific Ocean"} ] }
Ta thấy rằng JSON nhỏ gọn hơn nhiều và không yêu cầu thẻ kết thúc trong khi XML thì có. Ngoài ra, XML không sử dụng một mảng như ví dụ này của JSON (bạn có thể biết thông qua việc sử dụng dấu ngoặc vuông).
Nếu bạn đã quen với HTML, bạn sẽ nhận thấy rằng XML trông khá giống nhau trong việc sử dụng các thẻ. Mặc dù JSON gọn gàng hơn và ít dài dòng hơn XML và sử dụng nhanh chóng trong nhiều trường hợp bao gồm các ứng dụng AJAX, bạn cần hiểu loại dự án mình đang làm trước khi quyết định sử dụng cấu trúc dữ liệu nào.
Tài nguyên
JSON là một định dạng tự nhiên để sử dụng trong JavaScript và có nhiều triển khai có sẵn để sử dụng trong nhiều ngôn ngữ lập trình phổ biến. Bạn có thể thấy hỗ trợ ngôn ngữ đầy đủ trên trang web “ Giới thiệu JSON ” và thư viện jQuery cũng có thể xử lý khả năng tương thích và phân tích cú pháp.
Hầu hết thời gian, bạn sẽ không viết JSON thuần túy mà sẽ kéo nó từ các nguồn dữ liệu hoặc chuyển đổi các file dữ liệu khác thành JSON. Bạn có thể chuyển đổi CSV hoặc dữ liệu được phân cách bằng tab mà bạn có thể tìm thấy trong các chương trình bảng tính thành JSON bằng cách sử dụng công cụ nguồn mở Mr. Data Converter . Bạn có thể chuyển đổi XML sang JSON và ngược lại với trang tiện ích -online.info được cấp phép bởi Creative Commons. Khi sử dụng các công cụ tự động, bạn nên xác minh kết quả của bạn và loại bỏ phần thừa nếu cần.
Khi dịch các loại dữ liệu khác sang JSON hoặc tạo dữ liệu của bạn , bạn có thể xác thực JSON của bạn bằng JSONLint và có thể kiểm tra JSON của bạn trong ngữ cảnh phát triển web với JSFiddle .
Kết luận
JSON là một định dạng nhẹ cho phép bạn dễ dàng chia sẻ, lưu trữ và làm việc với dữ liệu. Như một định dạng, JSON đã được hỗ trợ nhiều hơn trong các API, bao gồm cả API Twitter .
Vì bạn có thể sẽ không tạo file .json
của riêng mình mà mua chúng từ các nguồn khác, điều quan trọng là phải suy nghĩ ít hơn về cấu trúc của JSON và nhiều hơn nữa về cách sử dụng JSON tốt nhất trong các chương trình của bạn.
Các tin liên quan