JSON là gì? Tổng quan về cấu trúc, cú pháp và cách sử dụng JSON

Trong quá trình xây dựng website, ứng dụng web và các hệ thống kết nối dữ liệu, việc trao đổi thông tin giữa các thành phần khác nhau là một nhu cầu gần như không thể thiếu. Trình duyệt cần nhận dữ liệu từ máy chủ, ứng dụng cần gửi thông tin đến API, hoặc hai hệ thống độc lập cần trao đổi dữ liệu với nhau. JSON là một trong những định dạng được sử dụng phổ biến nhất cho những tình huống này.

Điểm đáng chú ý của JSON không nằm ở việc nó có nhiều tính năng phức tạp, mà ở sự đơn giản. Dữ liệu được tổ chức theo dạng dễ đọc đối với con người nhưng đồng thời cũng rất thuận tiện để chương trình phân tích và xử lý. Nhờ đó, JSON xuất hiện rộng rãi trong API, JavaScript, ứng dụng web, cấu hình phần mềm, cơ sở dữ liệu và nhiều hệ thống hiện đại.

Trong bài viết này, Web Mới sẽ đi từ nền tảng đến cách sử dụng thực tế để làm rõ JSON là gì, dữ liệu bên trong được tổ chức như thế nào, vì sao định dạng này trở nên phổ biến và cần hiểu những nguyên tắc nào trước khi sử dụng.

JSON là gì? Tổng quan về cấu trúc, cú pháp và cách sử dụng JSON
JSON là gì? Tổng quan về cấu trúc, cú pháp và cách sử dụng JSON

JSON thực chất là gì và được dùng để làm gì?

JSON là viết tắt của JavaScript Object Notation, một định dạng biểu diễn dữ liệu dựa trên cách tổ chức dữ liệu dạng đối tượng và danh sách. Ban đầu JSON có mối liên hệ chặt chẽ với JavaScript, nhưng hiện nay nó đã trở thành một định dạng dữ liệu độc lập và có thể được sử dụng với rất nhiều ngôn ngữ lập trình khác nhau.

Nói đơn giản, JSON giúp biến dữ liệu có cấu trúc thành một dạng văn bản mà cả con người lẫn phần mềm đều có thể hiểu. Một thông tin như tên người dùng, email, danh sách sản phẩm hoặc trạng thái đơn hàng đều có thể được tổ chức thành JSON trước khi truyền từ nơi này sang nơi khác.

Ví dụ, thay vì truyền một chuỗi thông tin không có cấu trúc rõ ràng, dữ liệu có thể được tổ chức theo từng thuộc tính:

{
  "name": "Nguyen Van A",
  "email": "example@email.com",
  "active": true
}

Trong ví dụ trên, mỗi thông tin được gắn với một tên thuộc tính cụ thể. Chương trình có thể nhanh chóng xác định đâu là tên, đâu là email và đâu là trạng thái tài khoản.

JSON không phải là cơ sở dữ liệu

Một nhầm lẫn khá phổ biến là xem JSON như một loại cơ sở dữ liệu. Thực tế, JSON chỉ là định dạng biểu diễn và trao đổi dữ liệu. Nó không tự đảm nhiệm vai trò lưu trữ, truy vấn hay quản lý dữ liệu giống như MySQL, PostgreSQL hoặc các hệ quản trị cơ sở dữ liệu khác.

Một file JSON có thể được lưu trên máy chủ hoặc máy tính cá nhân, nhưng điều đó không biến JSON thành một hệ quản trị cơ sở dữ liệu. Tương tự, một API trả về JSON cũng không có nghĩa dữ liệu được lưu trữ trực tiếp dưới dạng JSON trong hệ thống phía máy chủ.

JSON thường xuất hiện ở đâu?

JSON có thể xuất hiện ở nhiều lớp khác nhau trong một hệ thống phần mềm. Một số trường hợp phổ biến gồm:

  • Trao đổi dữ liệu giữa trình duyệt và máy chủ thông qua API.
  • Truyền dữ liệu giữa các dịch vụ trong một hệ thống phần mềm.
  • Lưu các thiết lập hoặc cấu hình của ứng dụng.
  • Biểu diễn dữ liệu trong JavaScript và nhiều ngôn ngữ lập trình khác.
  • Định dạng dữ liệu đầu vào hoặc đầu ra của các dịch vụ web.
  • Lưu trữ các tập dữ liệu nhỏ cần cấu trúc rõ ràng dưới dạng tệp.

Đặc biệt trong quá trình phát triển website, JSON thường nằm ở vị trí trung gian giữa giao diện và hệ thống xử lý phía máy chủ. Người dùng thực hiện một thao tác trên trang web, trình duyệt gửi dữ liệu đến máy chủ, máy chủ xử lý rồi trả kết quả về. JSON có thể được dùng để biểu diễn dữ liệu ở cả chiều gửi và chiều nhận.

Cấu trúc dữ liệu của JSON được tổ chức như thế nào?

Muốn sử dụng JSON chính xác, điều quan trọng đầu tiên không phải là ghi nhớ thật nhiều đoạn mã mà là hiểu cách dữ liệu được tổ chức. JSON chủ yếu dựa trên hai dạng cấu trúc: objectarray.

Object phù hợp khi dữ liệu được tổ chức theo từng thuộc tính có tên. Array phù hợp khi cần biểu diễn một danh sách gồm nhiều giá trị. Hai cấu trúc này có thể kết hợp với nhau để tạo thành dữ liệu nhiều tầng.

Object dùng để biểu diễn dữ liệu có thuộc tính

Object được bao quanh bởi dấu ngoặc nhọn. Bên trong object, dữ liệu được biểu diễn dưới dạng cặp tên và giá trị. Tên thuộc tính phải được đặt trong dấu ngoặc kép và được phân cách với giá trị bằng dấu hai chấm.

{
  "title": "Thiết kế website",
  "price": 5000000,
  "available": true
}

Ở đây, title, priceavailable là các tên thuộc tính. Giá trị tương ứng lần lượt là một chuỗi ký tự, một số và một giá trị Boolean.

Cách tổ chức này giúp dữ liệu trở nên trực quan. Khi đọc JSON, lập trình viên có thể nhanh chóng biết mỗi giá trị đang đại diện cho thông tin nào mà không cần dựa vào vị trí của dữ liệu.

Array dùng để biểu diễn danh sách

Array được bao quanh bởi dấu ngoặc vuông và có thể chứa nhiều giá trị. Các giá trị trong danh sách được ngăn cách bằng dấu phẩy.

[
  "HTML",
  "CSS",
  "JavaScript",
  "PHP"
]

Array đặc biệt hữu ích khi API cần trả về một danh sách sản phẩm, bài viết, người dùng hoặc bất kỳ tập dữ liệu có thứ tự nào.

Array cũng có thể chứa object. Đây là cấu trúc rất thường gặp khi làm việc với API:

[
  {
    "id": 1,
    "name": "Sản phẩm A"
  },
  {
    "id": 2,
    "name": "Sản phẩm B"
  }
]

Trong trường hợp này, mỗi phần tử của danh sách là một object có cấu trúc riêng. Cách tổ chức này cho phép biểu diễn một tập dữ liệu tương đối phức tạp nhưng vẫn giữ được cấu trúc rõ ràng.

Object có thể chứa object và array

Một ưu điểm quan trọng của JSON là các cấu trúc có thể lồng vào nhau. Object có thể chứa array, array có thể chứa object, và object bên trong lại có thể chứa thêm các object khác.

Ví dụ, thông tin một đơn hàng có thể bao gồm thông tin khách hàng và danh sách sản phẩm:

{
  "order_id": 1001,
  "customer": {
    "name": "Nguyen Van A",
    "email": "example@email.com"
  },
  "products": [
    {
      "name": "Laptop",
      "quantity": 1
    },
    {
      "name": "Mouse",
      "quantity": 2
    }
  ]
}

Cấu trúc trên phản ánh khá sát dữ liệu trong thực tế. Một đơn hàng có một khách hàng và nhiều sản phẩm. JSON cho phép mô hình hóa mối quan hệ đó trực tiếp trong dữ liệu thay vì phải biến mọi thứ thành một chuỗi văn bản khó xử lý.

Vì sao JSON trở thành định dạng dữ liệu phổ biến?

Sự phổ biến của JSON đến từ sự cân bằng giữa tính đơn giản và khả năng biểu diễn dữ liệu có cấu trúc. Một định dạng trao đổi dữ liệu tốt không chỉ cần máy tính đọc được mà còn phải thuận tiện cho con người kiểm tra, phát triển và sửa lỗi.

JSON đáp ứng khá tốt những yêu cầu đó. Cấu trúc của nó ngắn gọn, dễ quan sát và không phụ thuộc vào một ngôn ngữ lập trình duy nhất.

Dễ đọc và dễ kiểm tra

JSON sử dụng những ký hiệu tương đối quen thuộc như dấu ngoặc nhọn, dấu ngoặc vuông, dấu hai chấm và dấu phẩy. Khi một API trả về hàng trăm dòng dữ liệu, lập trình viên vẫn có thể quan sát và xác định được từng nhóm thông tin.

Đặc điểm này đặc biệt hữu ích khi kiểm tra API trong quá trình phát triển website. Nếu máy chủ trả về dữ liệu không đúng, lập trình viên có thể xem trực tiếp phản hồi để xác định vấn đề nằm ở cấu trúc, tên thuộc tính hay giá trị.

Không phụ thuộc vào một ngôn ngữ lập trình

Mặc dù tên gọi của JSON bắt nguồn từ JavaScript, dữ liệu JSON có thể được xử lý bằng PHP, Python, Java, C#, Go, Ruby và nhiều ngôn ngữ khác.

Điều này rất quan trọng đối với các hệ thống hiện đại. Giao diện website có thể được xây dựng bằng JavaScript, máy chủ sử dụng PHP, trong khi một dịch vụ khác lại được viết bằng Python. Các thành phần này vẫn có thể trao đổi dữ liệu thông qua cùng một định dạng.

Phù hợp với mô hình API hiện đại

API thường cần truyền dữ liệu giữa client và server. JSON có cấu trúc rõ ràng, kích thước tương đối gọn và được hỗ trợ rộng rãi nên phù hợp với nhiệm vụ này.

Ví dụ, một API có thể trả về thông tin sản phẩm theo dạng:

{
  "id": 25,
  "name": "Laptop",
  "price": 15000000,
  "stock": 12
}

Phía giao diện chỉ cần đọc các thuộc tính cần thiết để hiển thị tên, giá và số lượng tồn kho. Nếu dữ liệu được thiết kế hợp lý, client và server có thể hoạt động độc lập mà vẫn giao tiếp với nhau một cách rõ ràng.

JSON và JavaScript có giống nhau không?

JSON và JavaScript có liên quan về mặt lịch sử và cách biểu diễn dữ liệu, nhưng chúng không phải là một. JavaScript là một ngôn ngữ lập trình, còn JSON là một định dạng dữ liệu.

JavaScript có thể tạo object, thực hiện phép tính, gọi hàm, xử lý điều kiện và thực hiện nhiều hoạt động lập trình khác. JSON thì không có mục đích đó. JSON chỉ mô tả dữ liệu theo một tập quy tắc cú pháp nhất định.

Ví dụ một object JavaScript có thể chứa hàm:

const user = {
  name: "Nguyen Van A",
  sayHello: function() {
    console.log("Hello");
  }
};

Nhưng hàm không phải là một kiểu dữ liệu hợp lệ trong JSON. Đây là một điểm khác biệt quan trọng mà người mới làm quen thường dễ bỏ qua.

JSON cần tuân thủ cú pháp riêng

JSON có quy tắc chặt chẽ hơn JavaScript object trong nhiều trường hợp. Chẳng hạn, tên thuộc tính trong JSON phải sử dụng dấu ngoặc kép.

{
  "name": "Nguyen Van A"
}

Cách viết trên là JSON hợp lệ. Nếu bỏ dấu ngoặc kép quanh tên thuộc tính, dữ liệu không còn tuân thủ cú pháp JSON tiêu chuẩn.

Hiểu đúng vai trò của JSON khi xây dựng website

JSON không phải yếu tố tạo nên giao diện website và cũng không thay thế HTML, CSS hay ngôn ngữ lập trình phía máy chủ. Vai trò chính của nó là mô tả và vận chuyển dữ liệu.

Có thể hình dung một website hiện đại thành nhiều thành phần. HTML chịu trách nhiệm về cấu trúc nội dung, CSS đảm nhiệm phần trình bày, JavaScript xử lý tương tác ở phía trình duyệt, còn máy chủ đảm nhận nghiệp vụ và dữ liệu. JSON thường xuất hiện ở điểm giao tiếp giữa các thành phần đó.

Ví dụ, khi người dùng mở trang danh sách sản phẩm, JavaScript có thể gửi yêu cầu đến API. Máy chủ truy vấn dữ liệu, xử lý nghiệp vụ rồi trả về kết quả dưới dạng JSON. JavaScript nhận dữ liệu và đưa những thông tin cần thiết lên giao diện.

Quy trình có thể được hiểu đơn giản như sau:

  1. Người dùng thực hiện thao tác trên website.
  2. Trình duyệt gửi yêu cầu đến máy chủ.
  3. Máy chủ xử lý yêu cầu và lấy dữ liệu cần thiết.
  4. Máy chủ đóng gói kết quả thành dữ liệu JSON.
  5. Trình duyệt nhận JSON và xử lý dữ liệu.
  6. Giao diện hiển thị kết quả cho người dùng.

Đây chính là lý do JSON thường được nhắc đến cùng với API, AJAX, JavaScript và các ứng dụng web hiện đại. Nó đóng vai trò như một ngôn ngữ dữ liệu trung gian, giúp những thành phần khác nhau hiểu được thông tin mà chúng trao đổi.

Cú pháp JSON cần tuân thủ những quy tắc nào?

JSON có cú pháp khá ngắn gọn nhưng lại yêu cầu tính chính xác cao. Chỉ một dấu phẩy đặt sai vị trí, một tên thuộc tính thiếu dấu ngoặc kép hoặc một chuỗi chứa ký tự đặc biệt không được xử lý đúng cũng có thể khiến toàn bộ dữ liệu trở thành JSON không hợp lệ.

Vì vậy, thay vì học JSON bằng cách ghi nhớ từng đoạn mã, nên nắm trước những quy tắc cốt lõi. Khi hiểu được các quy tắc này, việc tự tạo hoặc kiểm tra một cấu trúc JSON sẽ dễ dàng hơn rất nhiều.

Tên thuộc tính phải được đặt trong dấu ngoặc kép

Trong một object JSON, tên thuộc tính phải là chuỗi được đặt trong dấu ngoặc kép. Đây là một trong những điểm khác biệt dễ nhận thấy khi so sánh JSON với cách viết object trong JavaScript.

{
  "name": "Nguyen Van A",
  "age": 30
}

Trong đó, nameage là tên thuộc tính. Dấu hai chấm dùng để phân tách tên thuộc tính với giá trị tương ứng.

Cách viết thuộc tính không có dấu ngoặc kép như ví dụ dưới đây không phải là cú pháp JSON hợp lệ:

{
  name: "Nguyen Van A"
}

Quy tắc này đặc biệt đáng chú ý khi dữ liệu được tạo tự động bằng JavaScript hoặc được chuyển đổi từ một object sang chuỗi JSON.

Các cặp thuộc tính được phân cách bằng dấu phẩy

Mỗi cặp tên và giá trị trong object được ngăn cách với nhau bằng dấu phẩy. Dấu phẩy cho phép trình phân tích biết một thuộc tính đã kết thúc và thuộc tính tiếp theo bắt đầu từ đâu.

{
  "name": "Nguyen Van A",
  "email": "example@email.com",
  "active": true
}

Một lỗi thường gặp là đặt dấu phẩy sau phần tử cuối cùng:

{
  "name": "Nguyen Van A",
  "email": "example@email.com",
}

Trong JSON tiêu chuẩn, dấu phẩy ở cuối như trên không được phép. Vì vậy, khi thêm hoặc xóa một thuộc tính, cần kiểm tra cả dấu phẩy đứng trước nó.

Chuỗi ký tự phải sử dụng dấu ngoặc kép

Giá trị dạng chuỗi trong JSON được đặt trong dấu ngoặc kép. Đây là quy tắc áp dụng cho cả tên thuộc tính và giá trị chuỗi.

{
  "title": "Thiết kế website",
  "category": "Website"
}

Không nên sử dụng dấu nháy đơn để thay thế:

{
  "title": 'Thiết kế website'
}

Cách viết trên thường có thể xuất hiện trong một số ngữ cảnh của JavaScript, nhưng không phải cú pháp chuỗi hợp lệ của JSON.

JSON hỗ trợ những kiểu dữ liệu nào?

JSON không cho phép tùy ý đưa mọi loại dữ liệu vào cấu trúc của nó. Một tập hợp kiểu dữ liệu cụ thể được sử dụng để đảm bảo dữ liệu có thể được trao đổi nhất quán giữa các hệ thống.

Các giá trị cơ bản gồm string, number, object, array, true, falsenull.

Kiểu dữ liệu Ý nghĩa Ví dụ
String Chuỗi ký tự "Web Mới"
Number Số nguyên hoặc số thực 15000000
Object Tập hợp các cặp thuộc tính và giá trị {"id": 10}
Array Danh sách các giá trị ["HTML", "CSS"]
Boolean Giá trị đúng hoặc sai true
Null Giá trị rỗng có chủ đích null

String biểu diễn dữ liệu dạng văn bản

String được sử dụng cho tên, tiêu đề, email, địa chỉ, mã sản phẩm hoặc bất kỳ dữ liệu nào có bản chất là văn bản.

{
  "name": "Web Mới",
  "website": "webmoi.vn"
}

Nếu chuỗi có chứa dấu ngoặc kép bên trong nội dung, ký tự đó cần được escape để không bị hiểu nhầm là điểm kết thúc chuỗi.

{
  "message": "Anh ấy nói: "Xin chào""
}

Đây là một nguyên tắc quan trọng khi JSON chứa nội dung do người dùng nhập hoặc những đoạn văn bản có nhiều ký tự đặc biệt.

Number dùng cho dữ liệu số

JSON sử dụng kiểu number để biểu diễn dữ liệu số. Không cần phân biệt riêng kiểu số nguyên và số thực trong cú pháp JSON.

{
  "quantity": 5,
  "price": 15000000,
  "rating": 4.5
}

Điều này giúp dữ liệu tương đối gọn và dễ xử lý. Tuy nhiên, khi hệ thống sử dụng JSON để truyền các giá trị tiền tệ, số rất lớn hoặc dữ liệu yêu cầu độ chính xác đặc biệt, việc lựa chọn cách biểu diễn cần được thiết kế phù hợp với ngôn ngữ và hệ thống nhận dữ liệu.

Boolean chỉ có hai giá trị

Boolean trong JSON chỉ có hai giá trị là truefalse. Hai giá trị này không đặt trong dấu ngoặc kép vì chúng là giá trị logic chứ không phải chuỗi.

{
  "published": true,
  "deleted": false
}

Không nên viết "true" nếu hệ thống cần một giá trị Boolean thực sự:

{
  "published": "true"
}

Hai cách trên nhìn khá giống nhau khi đọc bằng mắt, nhưng bản chất dữ liệu hoàn toàn khác. Giá trị đầu tiên là Boolean, trong khi giá trị thứ hai là String.

Null biểu diễn giá trị chưa có hoặc không tồn tại

null được dùng khi một thuộc tính có tồn tại nhưng hiện chưa có giá trị phù hợp.

{
  "name": "Nguyen Van A",
  "avatar": null
}

Trong ví dụ này, thuộc tính avatar vẫn tồn tại nhưng chưa có dữ liệu. Đây là điểm khác với việc hoàn toàn không trả về thuộc tính avatar.

Việc lựa chọn giữa bỏ thuộc tính và sử dụng null nên được quy định thống nhất trong API. Nếu một API lúc có dữ liệu thì trả về thuộc tính, lúc không có dữ liệu lại xóa thuộc tính, phía giao diện có thể phải xử lý nhiều trường hợp hơn mức cần thiết.

Object và array khác nhau ở điểm nào?

Hai cấu trúc này là nền tảng của hầu hết dữ liệu JSON phức tạp. Có thể hiểu đơn giản rằng object trả lời câu hỏi dữ liệu này có những thuộc tính nào, còn array trả lời câu hỏi có những phần tử nào trong danh sách.

Cấu trúc Ký hiệu Mục đích chính
Object { } Tổ chức dữ liệu theo thuộc tính và giá trị
Array [ ] Biểu diễn một danh sách các giá trị

Chẳng hạn, một sản phẩm là một object:

{
  "id": 101,
  "name": "Laptop",
  "price": 15000000
}

Trong khi nhiều sản phẩm sẽ phù hợp với array:

[
  {
    "id": 101,
    "name": "Laptop",
    "price": 15000000
  },
  {
    "id": 102,
    "name": "Keyboard",
    "price": 800000
  }
]

Sự kết hợp giữa object và array là cơ chế quan trọng giúp JSON có thể biểu diễn từ dữ liệu rất đơn giản đến những phản hồi API nhiều tầng.

Array không nhất thiết chỉ chứa chuỗi

Một array JSON có thể chứa nhiều kiểu giá trị hợp lệ, chẳng hạn như số, Boolean, object hoặc các array khác.

{
  "tags": [
    "website",
    "seo",
    "json"
  ],
  "scores": [
    8,
    9.5,
    10
  ]
}

Tuy nhiên, trong thiết kế dữ liệu thực tế, nên duy trì cấu trúc nhất quán. Một danh sách được thiết kế để chứa các object có cùng ý nghĩa sẽ dễ xử lý hơn nhiều so với một array chứa các phần tử không đồng nhất.

Cách đọc một cấu trúc JSON nhiều tầng

Khi mới tiếp xúc, JSON nhiều tầng có thể khiến người đọc cảm thấy rối vì có nhiều dấu ngoặc nhọn và ngoặc vuông liên tiếp. Cách dễ nhất là xác định cấu trúc từ ngoài vào trong thay vì cố đọc toàn bộ dữ liệu cùng lúc.

{
  "customer": {
    "name": "Nguyen Van A",
    "address": {
      "city": "Ho Chi Minh",
      "country": "Viet Nam"
    }
  },
  "orders": [
    {
      "id": 1001,
      "total": 500000
    },
    {
      "id": 1002,
      "total": 750000
    }
  ]
}

Object ngoài cùng chứa hai thuộc tính là customerorders.

customer tiếp tục chứa một object khác. Bên trong đó, address lại là một object có thông tin thành phố và quốc gia.

orders là một array. Mỗi phần tử trong array lại là một object đại diện cho một đơn hàng.

Có thể hình dung cấu trúc trên theo quan hệ:

  • Thông tin chính
    • Khách hàng
      • Tên
      • Địa chỉ
    • Danh sách đơn hàng
      • Đơn hàng 1
      • Đơn hàng 2

Khi đọc JSON theo từng tầng như vậy, việc xác định vị trí của một giá trị sẽ đơn giản hơn. Đây cũng là cách nên áp dụng khi thiết kế response cho API: cấu trúc phải phản ánh được mối quan hệ giữa các nhóm dữ liệu thay vì gom tất cả thông tin vào một tầng duy nhất.

Những lỗi cú pháp JSON thường gặp

Phần lớn lỗi JSON trong quá trình phát triển không đến từ những cấu trúc quá phức tạp mà bắt nguồn từ các chi tiết rất nhỏ. Hiểu trước những lỗi phổ biến sẽ giúp việc kiểm tra dữ liệu nhanh hơn.

Thiếu dấu phẩy giữa các thuộc tính

{
  "name": "Nguyen Van A"
  "age": 30
}

Hai thuộc tính đứng cạnh nhau nhưng không có dấu phẩy phân cách nên cấu trúc không hợp lệ.

Dùng dấu phẩy sau phần tử cuối

{
  "name": "Nguyen Van A",
  "age": 30,
}

JSON tiêu chuẩn không cho phép dấu phẩy thừa ở cuối object hoặc array.

Đóng sai hoặc thiếu dấu ngoặc

{
  "user": {
    "name": "Nguyen Van A"
  }
}

Với dữ liệu lồng nhiều tầng, cần bảo đảm mỗi object và array đều được đóng đúng cấp. Chỉ cần thiếu một dấu } hoặc ], toàn bộ cấu trúc có thể không thể phân tích.

Nhầm giữa chuỗi và giá trị thực

{
  "age": "30",
  "active": "true"
}

Đoạn trên vẫn có thể là JSON hợp lệ, nhưng ageactive đang là chuỗi chứ không phải number và Boolean. Nếu hệ thống phía nhận mong đợi dữ liệu có kiểu chính xác, sự khác biệt này có thể dẫn đến lỗi xử lý hoặc kết quả không như mong muốn.

JSON đẹp và JSON hợp lệ có phải là một?

Không hoàn toàn. Một JSON có thể được viết trên một dòng nhưng vẫn hoàn toàn hợp lệ. Ngược lại, một đoạn JSON được xuống dòng và căn lề đẹp mắt vẫn có thể sai cú pháp.

{"name":"Nguyen Van A","age":30,"active":true}

Đoạn dữ liệu trên hợp lệ dù không được định dạng nhiều dòng.

Việc xuống dòng và thụt đầu dòng chủ yếu giúp con người dễ đọc. Khi làm việc với API hoặc dữ liệu lớn, định dạng dễ đọc rất hữu ích trong giai đoạn phát triển và kiểm tra lỗi. Trong quá trình truyền tải thực tế, hệ thống có thể sử dụng dạng rút gọn để giảm kích thước dữ liệu.

Vì vậy, cần phân biệt hai khái niệm: tính hợp lệ của cú phápkhả năng đọc của con người. Chúng liên quan nhưng không phải cùng một vấn đề.

JSON được sử dụng như thế nào trong API?

Trong các website và ứng dụng hiện đại, JSON thường phát huy vai trò rõ nhất khi làm việc với API. API tạo ra một giao tiếp có quy tắc giữa bên gửi và bên nhận, còn JSON là một trong những cách phổ biến để biểu diễn dữ liệu được trao đổi trong quá trình đó.

Chẳng hạn, một website cần lấy thông tin sản phẩm từ máy chủ. Thay vì trả về một trang HTML hoàn chỉnh, API có thể trả về dữ liệu:

{
  "success": true,
  "product": {
    "id": 125,
    "name": "Laptop",
    "price": 15000000
  }
}

Phía giao diện có thể đọc từng thuộc tính để quyết định cách hiển thị. Nếu API trả về successtrue, ứng dụng có thể tiếp tục xử lý sản phẩm. Nếu xảy ra lỗi, API có thể trả về một cấu trúc khác với thông tin mô tả lỗi.

Điểm quan trọng ở đây là JSON không quyết định nghiệp vụ của API. Nó chỉ là định dạng giúp API biểu diễn kết quả một cách có cấu trúc. Cách đặt tên thuộc tính, mã lỗi, cấu trúc dữ liệu và quy tắc phản hồi vẫn cần được thiết kế riêng cho từng hệ thống.

Dữ liệu gửi lên máy chủ cũng có thể là JSON

JSON không chỉ được dùng cho dữ liệu trả về. Client cũng có thể đóng gói thông tin thành JSON rồi gửi lên máy chủ.

{
  "name": "Nguyen Van A",
  "email": "example@email.com",
  "phone": "0900000000"
}

Máy chủ tiếp nhận dữ liệu, kiểm tra tính hợp lệ, xử lý nghiệp vụ rồi trả về kết quả. Mô hình này đặc biệt phổ biến trong các form, ứng dụng quản trị, hệ thống thương mại điện tử và các ứng dụng web có giao diện tương tác cao.

Đọc và tạo dữ liệu bằng JavaScript

JavaScript có sẵn các phương thức để chuyển đổi qua lại giữa object và chuỗi JSON. Đây là thao tác rất thường xuyên khi làm việc với API.

Chuyển object thành chuỗi JSON

Khi cần gửi dữ liệu dưới dạng JSON, JavaScript có thể chuyển một object thành chuỗi bằng JSON.stringify().

const user = {
  name: "Nguyen Van A",
  age: 30
};

const jsonData = JSON.stringify(user);

Kết quả của JSON.stringify() là một chuỗi. Điều này quan trọng vì object JavaScript và chuỗi JSON không phải cùng một loại dữ liệu.

Chuyển chuỗi JSON thành object

Khi nhận một chuỗi JSON từ API, JavaScript có thể sử dụng JSON.parse() để chuyển chuỗi đó thành dữ liệu mà chương trình có thể truy cập.

const jsonData = '{"name":"Nguyen Van A","age":30}';

const user = JSON.parse(jsonData);

console.log(user.name);

Sau khi parse thành công, chương trình có thể truy cập thuộc tính name, age và các dữ liệu bên trong theo cấu trúc đã nhận.

Tuy nhiên, nếu chuỗi đầu vào không phải JSON hợp lệ, quá trình parse có thể phát sinh lỗi. Vì vậy, dữ liệu nhận từ bên ngoài không nên được mặc định là luôn đúng.

JSON được xử lý như thế nào trong PHP?

PHP cũng cung cấp sẵn các hàm để làm việc với JSON. Hai thao tác quan trọng nhất là chuyển dữ liệu PHP thành JSON và chuyển JSON thành dữ liệu PHP.

Chuyển dữ liệu PHP sang JSON

Hàm json_encode() được sử dụng để chuyển một giá trị PHP thành chuỗi JSON.

<?php
$user = [
    "name" => "Nguyen Van A",
    "age" => 30
];

echo json_encode($user);
?>

Khi chạy, dữ liệu PHP có thể được biểu diễn thành JSON tương ứng để gửi đến phía client hoặc một hệ thống khác.

Chuyển JSON thành dữ liệu PHP

Chiều ngược lại có thể sử dụng json_decode(). Hàm này giúp PHP phân tích chuỗi JSON để chương trình tiếp tục xử lý dữ liệu.

<?php
$json = '{"name":"Nguyen Van A","age":30}';

$user = json_decode($json, true);

echo $user["name"];
?>

Tham số thứ hai trong ví dụ được đặt là true để kết quả được chuyển thành associative array. Nếu không sử dụng tham số này, PHP có thể trả về một object tùy theo cách gọi hàm.

Thiết kế dữ liệu JSON thế nào để dễ bảo trì?

Viết được một JSON hợp lệ mới chỉ là bước đầu. Trong một hệ thống thực tế, điều quan trọng hơn là dữ liệu phải có cấu trúc nhất quán, dễ hiểu và ít gây nhầm lẫn cho những người sẽ sử dụng nó sau này.

Một cấu trúc JSON tốt nên giúp lập trình viên hiểu được ý nghĩa dữ liệu mà không cần đọc quá nhiều tài liệu bổ sung.

Đặt tên thuộc tính nhất quán

Không nên lúc sử dụng user_name, lúc lại dùng userName hoặc username cho cùng một ý nghĩa trong các API khác nhau mà không có lý do rõ ràng.

Điều quan trọng không phải chọn một quy tắc duy nhất cho mọi dự án, mà là chọn quy tắc phù hợp rồi áp dụng nhất quán.

{
  "user_id": 25,
  "user_name": "Nguyen Van A",
  "created_at": "2026-09-05"
}

Khi cấu trúc được thống nhất, phía client sẽ dễ xử lý hơn và tài liệu API cũng rõ ràng hơn.

Không nên lồng dữ liệu quá sâu nếu không cần thiết

JSON hỗ trợ cấu trúc nhiều tầng, nhưng điều đó không có nghĩa mọi dữ liệu đều nên được lồng thật sâu.

{
  "data": {
    "user": {
      "profile": {
        "contact": {
          "information": {
            "email": "example@email.com"
          }
        }
      }
    }
  }
}

Về mặt cấu trúc, dữ liệu có thể được tổ chức như vậy, nhưng việc truy cập và bảo trì sẽ trở nên khó khăn hơn. Nếu các tầng trung gian không mang lại giá trị thực sự, nên xem xét thiết kế đơn giản hơn.

Giữ kiểu dữ liệu ổn định

Một thuộc tính nên có kiểu dữ liệu nhất quán trong những phản hồi có cùng ý nghĩa.

Ví dụ, nếu quantity đại diện cho số lượng sản phẩm thì không nên lúc trả về số:

{
  "quantity": 10
}

nhưng ở một trường hợp khác lại trả về chuỗi:

{
  "quantity": "10"
}

Sự thay đổi này có thể khiến phía client phải kiểm tra và chuyển đổi dữ liệu liên tục. Một API có quy ước kiểu dữ liệu rõ ràng sẽ dễ sử dụng và ít phát sinh lỗi hơn.

JSON có an toàn tuyệt đối khi truyền dữ liệu không?

JSON chỉ là một định dạng dữ liệu nên bản thân nó không phải cơ chế bảo mật. Việc dữ liệu được viết dưới dạng JSON không đồng nghĩa với việc dữ liệu đó đã được mã hóa hoặc bảo vệ khỏi các nguy cơ bên ngoài.

Nếu API truyền dữ liệu nhạy cảm, hệ thống cần sử dụng các biện pháp bảo vệ phù hợp như kết nối HTTPS, xác thực, phân quyền, kiểm tra dữ liệu đầu vào và kiểm soát thông tin được phép trả về.

Đặc biệt, không nên đưa những thông tin nội bộ hoặc dữ liệu nhạy cảm vào response chỉ vì phía client có thể cần chúng trong tương lai. API nên trả về đúng những dữ liệu cần thiết cho chức năng đang thực hiện.

Không tin tưởng dữ liệu JSON từ phía người dùng

Dữ liệu JSON nhận từ trình duyệt hoặc một hệ thống bên ngoài vẫn là dữ liệu đầu vào. Server cần kiểm tra kiểu dữ liệu, giá trị, kích thước và nội dung trước khi đưa vào quá trình xử lý hoặc lưu trữ.

Ví dụ, nếu API yêu cầu quantity là một số nguyên dương, máy chủ không nên mặc định rằng client luôn gửi đúng yêu cầu đó.

{
  "product_id": 125,
  "quantity": -500
}

JSON trên có thể hợp lệ về mặt cú pháp nhưng lại không hợp lệ về mặt nghiệp vụ. Đây là sự khác biệt rất quan trọng: JSON hợp lệ không đồng nghĩa dữ liệu hợp lệ đối với ứng dụng.

Khi nào nên sử dụng JSON?

JSON phù hợp nhất khi cần trao đổi dữ liệu có cấu trúc giữa các thành phần phần mềm hoặc cần lưu một lượng dữ liệu dạng cấu hình mà con người vẫn cần đọc và chỉnh sửa.

  • Kết nối frontend với backend thông qua API.
  • Trao đổi dữ liệu giữa các dịch vụ.
  • Làm định dạng response cho web API.
  • Lưu cấu hình ứng dụng có cấu trúc.
  • Trao đổi dữ liệu giữa những ngôn ngữ lập trình khác nhau.
  • Biểu diễn dữ liệu dạng object và danh sách.

Đặc biệt, JSON rất phù hợp với những hệ thống cần giao tiếp giữa nhiều công nghệ khác nhau. Một hệ thống có thể thay đổi ngôn ngữ lập trình ở phía server nhưng vẫn giữ nguyên cách trao đổi dữ liệu nếu hợp đồng API được thiết kế tốt.

Khi nào JSON không phải lựa chọn phù hợp nhất?

JSON rất phổ biến nhưng không có nghĩa nó là lựa chọn tối ưu cho mọi bài toán. Một định dạng dữ liệu nên được lựa chọn dựa trên yêu cầu thực tế về hiệu năng, cấu trúc, kích thước, khả năng tương thích và cách hệ thống xử lý dữ liệu.

Nếu cần lưu trữ và truy vấn dữ liệu quan hệ phức tạp, JSON không thể thay thế vai trò của một hệ quản trị cơ sở dữ liệu. Nếu cần truyền dữ liệu nhị phân với yêu cầu hiệu quả cao, các định dạng hoặc giao thức chuyên dụng có thể phù hợp hơn.

JSON cũng không phải lựa chọn lý tưởng nếu dữ liệu có yêu cầu đặc biệt về kiểu dữ liệu mà JSON không biểu diễn trực tiếp. Khi đó, hệ thống cần có quy ước chuyển đổi rõ ràng hoặc sử dụng một định dạng phù hợp hơn.

Những nguyên tắc quan trọng khi làm việc với JSON

Đối với người mới, không cần ghi nhớ quá nhiều mẹo nhỏ. Chỉ cần nắm chắc một số nguyên tắc nền tảng là đã có thể sử dụng JSON hiệu quả trong phần lớn trường hợp thông thường.

  1. Luôn phân biệt JSON với object của ngôn ngữ lập trình.
  2. Tên thuộc tính trong JSON phải sử dụng dấu ngoặc kép.
  3. Không đặt dấu phẩy sau phần tử cuối cùng.
  4. Phân biệt rõ string, number, Boolean và null.
  5. Hiểu object và array trước khi xử lý cấu trúc nhiều tầng.
  6. Giữ kiểu dữ liệu nhất quán trong API.
  7. Không mặc định dữ liệu nhận từ bên ngoài là hợp lệ.
  8. Thiết kế cấu trúc đơn giản nếu không cần lồng nhiều tầng.
  9. Không xem JSON là một cơ chế mã hóa hoặc bảo mật.
  10. Quy định rõ cấu trúc dữ liệu khi xây dựng API để client và server cùng hiểu một cách thống nhất.

JSON quan trọng thế nào trong quá trình phát triển website?

JSON có thể không trực tiếp tạo ra một giao diện đẹp, nhưng nó đóng vai trò quan trọng phía sau rất nhiều website và ứng dụng mà người dùng tương tác hằng ngày. Khi một trang web tải danh sách sản phẩm mà không cần tải lại toàn bộ trang, cập nhật dữ liệu theo thời gian thực hoặc giao tiếp với một dịch vụ bên ngoài, khả năng cao có một lớp trao đổi dữ liệu có cấu trúc đứng phía sau.

Điều đáng học ở JSON không chỉ là cách đặt dấu ngoặc hay dấu phẩy. Quan trọng hơn là hiểu cách tổ chức dữ liệu để máy chủ, trình duyệt và các hệ thống khác có thể giao tiếp rõ ràng với nhau.

Với người mới học lập trình web, nên bắt đầu bằng việc đọc được một object và một array, sau đó chuyển sang dữ liệu lồng nhau, rồi thực hành chuyển đổi JSON với JavaScript hoặc PHP. Khi đã hiểu những nền tảng này, việc làm việc với API sẽ trở nên dễ dàng hơn rất nhiều.

Đối với những người đang xây dựng website chuyên nghiệp, JSON còn liên quan trực tiếp đến cách thiết kế API, quy ước response, kiểm tra dữ liệu đầu vào và khả năng mở rộng hệ thống. Một cấu trúc dữ liệu được thiết kế tốt ngay từ đầu có thể giúp giảm đáng kể công sức xử lý về sau.

Vì vậy, JSON không đơn giản chỉ là một đoạn văn bản chứa dữ liệu. Nó là một cách tổ chức thông tin có quy tắc, giúp các thành phần phần mềm trao đổi dữ liệu theo một cấu trúc mà cả con người và máy tính đều có thể hiểu.

  • 0 Bình luận
CEO Bùi Tấn Lực | Founder Web Mới
Bùi Tấn Lực
Tìm hiểu về CEO Bùi Tấn Lực, Founder Web Mới với nhiều năm kinh nghiệm trong lĩnh vực phát triển website, SEO và chia sẻ kiến thức công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về JSON là gì? Tổng quan về cấu trúc, cú pháp và cách sử dụng JSON
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !