JSON: nó là gì, cấu trúc dữ liệu và nguyên lý hoạt động

Tác giả: IT Sectr Đã đăng: 2026-03-08 Thời gian đọc: 8 phút

JSON (JavaScript Object Notation) là một định dạng trao đổi dữ liệu dựa trên văn bản, dựa trên cú pháp đối tượng JavaScript. Nó được sử dụng ở khắp mọi nơi: từ API REST và tệp cấu hình đến lưu trữ dữ liệu trong cơ sở dữ liệu và ứng dụng di động. Theo trang web chính thức của JSON, định dạng này độc lập với ngôn ngữ lập trình và được hỗ trợ bởi hầu hết các nền tảng hiện đại. JSON đã trở thành tiêu chuẩn thực tế cho việc truyền dữ liệu giữa máy khách và máy chủ.

Những điểm chính

  • JSON — định dạng văn bản nhẹ cho dữ liệu có cấu trúc dựa trên cú pháp JavaScript
  • Sáu kiểu dữ liệu — chuỗi, số, boolean, null, mảng và đối tượng cho mọi cấu trúc
  • Tính phổ quát — được hỗ trợ bởi tất cả ngôn ngữ lập trình và nền tảng
  • API REST — định dạng chính để trao đổi dữ liệu trong ứng dụng web và di động
  • Khả năng đọc của con người — cú pháp đơn giản dễ đọc và chỉnh sửa mà không cần công cụ

JSON là gì?

JSON là một định dạng văn bản để biểu diễn dữ liệu có cấu trúc, dựa trên cú pháp JavaScript. Mặc dù có nguồn gốc từ JavaScript, định dạng này hoàn toàn độc lập với ngôn ngữ — trình phân tích và tuần tự hóa tồn tại cho tất cả các ngôn ngữ lập trình phổ biến.

Lịch sử của JSON bắt đầu vào đầu những năm 2000, khi Douglas Crockford trích xuất một tập con của cú pháp JavaScript để trao đổi dữ liệu. Năm 2013, định dạng này được tiêu chuẩn hóa thành ECMA-404, và sau đó là ISO/IEC 21778:2017. Tên viết tắt của JavaScript Object Notation.

Ưu điểm chính của JSON là cú pháp tối giản. Chỉ sáu kiểu được sử dụng để mô tả dữ liệu: chuỗi, số, boolean, null, mảng và đối tượng. Điều này đủ để biểu diễn bất kỳ cấu trúc dữ liệu nào được sử dụng trong ứng dụng.

JSON được sử dụng ở đâu

  • API REST — định dạng chính cho yêu cầu và phản hồi giữa máy chủ và máy khách
  • Tệp cấu hình — package.json, tsconfig.json, .prettierrc
  • Cơ sở dữ liệu — MongoDB, PostgreSQL (JSONB), Firebase Firestore
  • Ứng dụng di động — lưu trữ cài đặt, lưu trữ dữ liệu tạm thời
  • Công nghệ web — WebSocket, Server-Sent Events, localStorage

Cú pháp và kiểu dữ liệu JSON

Cú pháp JSON cực kỳ đơn giản: dữ liệu được biểu diễn dưới dạng cặp khóa-giá trị, trong đó khóa là một chuỗi trong dấu ngoặc kép và giá trị là một trong sáu kiểu cơ bản. Đối tượng được đặt trong dấu ngoặc nhọn, mảng trong dấu ngoặc vuông. Chuỗi phải sử dụng dấu ngoặc kép; dấu ngoặc đơn không được phép.

Số trong JSON có thể là số nguyên hoặc dấu phẩy động, dương hoặc âm, với ký hiệu số mũ. Giá trị boolean được biểu diễn bằng các ký tự true và false, và sự vắng mặt của giá trị bằng null. Mảng chứa một tập hợp có thứ tự các giá trị thuộc bất kỳ kiểu nào, bao gồm mảng và đối tượng lồng nhau.

json
{
  "name": "JSON",
  "type": "text",
  "version": 2024,
  "flexible": true,
  "extensions": null,
  "languages": [
    "JavaScript",
    "Python",
    "Java"
  ],
  "nested": {
    "info": "hỗ trợ lồng nhau"
  }
}
Kiểu Ví dụ Mô tả
Chuỗi “văn bản” Trong dấu ngoặc kép, với chuỗi thoát
Số 42 Nguyên, dấu phẩy động, số mũ
Boolean true true hoặc false — không có dấu ngoặc
null null Không có giá trị
Đối tượng {} Tập hợp không có thứ tự các cặp khóa-giá trị
Mảng [] Danh sách có thứ tự các giá trị

JSON trong API REST

JSON là định dạng trao đổi dữ liệu chính cho API REST trong phát triển di động và web. Máy chủ gửi JSON trong phần thân phản hồi, máy khách trong phần thân yêu cầu. Tiêu đề Content-Type tiêu chuẩn cho JSON là application/json.

API REST hiện đại sử dụng JSON để truyền tải tất cả các loại dữ liệu: từ danh sách đơn giản đến cấu trúc lồng nhau phức tạp với mối quan hệ giữa các thực thể. Thư viện máy khách (như Axios trong JavaScript hoặc Retrofit trên Android) tự động tuần tự hóa và giải tuần tự hóa JSON, giải phóng nhà phát triển khỏi việc phân tích thủ công.

Một lợi thế quan trọng của JSON trong API REST là khả năng truyền dữ liệu một phần (phản hồi một phần) qua tham số truy vấn, cũng như hỗ trợ tài nguyên lồng nhau mà không cần yêu cầu bổ sung đến máy chủ.

Phân tích JSON trên nền tảng di động

Phân tích JSON trên nền tảng di động được thực hiện bằng các công cụ tích hợp sẵn. Android sử dụng Gson của Google hoặc Moshi của Square, iOS sử dụng giao thức Codable với JSONDecoder. Mỗi nền tảng cung cấp các công cụ thuận tiện để chuyển đổi JSON thành đối tượng gốc và ngược lại.

JSON trên Android (Kotlin)

Trên Android, cách tiếp cận phổ biến sử dụng Gson hoặc Moshi. Chỉ cần định nghĩa một lớp dữ liệu với chú thích @SerializedName và gọi fromJson để giải tuần tự hóa. Thư viện tự động ánh xạ tên trường JSON với thuộc tính của lớp.

kotlin
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName

data class User(
    @SerializedName("id") val id: Int,
    @SerializedName("name") val name: String,
    @SerializedName("email") val email: String
)

fun parseJson(jsonString: String): User {
    val gson = Gson()
    return gson.fromJson(jsonString, User::class.java)
}

JSON trên iOS (Swift)

Trên iOS, giao thức tích hợp sẵn Codable với JSONDecoder được sử dụng. Cấu trúc dữ liệu được khai báo như một struct tuân thủ Codable, sau đó JSON được phân tích bằng một dòng duy nhất. JSONEncoder thực hiện tuần tự hóa ngược — chuyển đổi đối tượng thành JSON để gửi đến máy chủ.

swift
import Foundation

struct User: Codable {
    let id: Int
    let name: String
    let email: String
}

func parseJSON(from data: Data) throws -> User {
    let decoder = JSONDecoder()
    return try decoder.decode(User.self, from: data)
}

JSON so với XML: so sánh định dạng

JSON và XML là hai định dạng chính để truyền tải dữ liệu có cấu trúc. JSON chiến thắng về sự đơn giản và hiệu suất, XML về tính chặt chẽ và xác thực. Sự lựa chọn giữa chúng phụ thuộc vào yêu cầu của dự án: API REST thường sử dụng JSON, tài liệu phức tạp với lược đồ sử dụng XML.

XML yêu cầu thẻ đóng cho mỗi phần tử, làm tăng kích thước dữ liệu lên 2-3 lần so với JSON. Đồng thời, XML hỗ trợ không gian tên, lược đồ XSD, thuộc tính và chuyển đổi XSLT, làm cho nó mạnh mẽ hơn cho quản lý tài liệu và tích hợp hệ thống doanh nghiệp.

Đặc điểm JSON XML
Cú pháp Tối giản, khóa-giá trị Dựa trên thẻ, thẻ mở và đóng
Kích thước dữ liệu Nhỏ gọn Lớn hơn JSON 2-3 lần
Kiểu dữ liệu Sáu kiểu cơ bản Chỉ văn bản, kiểu qua lược đồ
Xác thực Không tích hợp, qua JSON Schema XSD — chặt chẽ và trưởng thành
Không gian tên Không có Hỗ trợ không gian tên đầy đủ
Tốc độ phân tích Cao Thấp hơn do độ phức tạp

Ví dụ làm việc với JSON

Các ví dụ minh họa các thao tác điển hình với JSON trong phát triển di động: phân tích phản hồi API, tạo JSON để gửi và xử lý cấu trúc lồng nhau. Hiểu các mẫu này là cần thiết cho bất kỳ nhà phát triển ứng dụng di động nào.

Tuần tự hóa đối tượng thành JSON

Trong JavaScript, JSON.stringify chuyển đổi đối tượng thành chuỗi JSON. Đối số thứ hai có thể là một mảng các khóa để tuần tự hóa chọn lọc hoặc một hàm thay thế. Đối số thứ ba đặt thụt lề cho định dạng.

typescript
interface Order {
  id: string;
  items: OrderItem[];
  total: number;
  createdAt: string;
}

const order: Order = {
  id: 'ord_001',
  items: [{ product: 'phone', quantity: 2 }],
  total: 1599.98,
  createdAt: '2026-07-03T10:00:00Z'
};

const jsonString = JSON.stringify(order, null, 2);

Phân tích JSON lồng nhau

Trong Kotlin với thư viện Moshi, các đối tượng JSON lồng nhau được xử lý thông qua các lớp dữ liệu lồng nhau. Chú thích @Json chỉ định tên trường JSON nếu nó khác với tên thuộc tính của lớp. Mảng được biểu diễn dưới dạng List với kiểu phần tử.

kotlin
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory

data class ApiResponse(
    val status: String,
    val data: List<Product>,
    val pagination: Pagination
)

data class Product(
    val id: Int,
    val title: String,
    val price: Double
)

data class Pagination(
    val page: Int,
    val total: Int
)

val moshi = Moshi.Builder()
    .add(KotlinJsonAdapterFactory())
    .build()

JSON Schema: xác thực cấu trúc

JSON Schema là một ngôn ngữ để mô tả cấu trúc của tài liệu JSON, tương tự như XSD cho XML. Sử dụng JSON Schema, bạn có thể chỉ định các trường bắt buộc, kiểu dữ liệu, phạm vi giá trị, mẫu chuỗi và cấu trúc lồng nhau. Xác thực lược đồ phát hiện lỗi dữ liệu trước khi chúng được xử lý trong ứng dụng.

JSON Schema được sử dụng rộng rãi trong OpenAPI (Swagger) để tài liệu hóa API REST, trong biểu mẫu xác thực dữ liệu đầu vào và trong kiểm thử. Bản thân tệp lược đồ là một tài liệu JSON, cho phép các trình phân tích JSON tiêu chuẩn đọc nó. Có các trình xác thực trực tuyến và thư viện cho tất cả các ngôn ngữ lập trình phổ biến.

Trong phát triển di động, JSON Schema được sử dụng để xác thực phản hồi từ máy chủ trong quá trình kiểm thử và để kiểm tra tệp cấu hình. Các thư viện như network-validator trên Android và json-schema-validator cho phép nhúng xác thực trực tiếp vào quy trình phát triển, ngăn ngừa lỗi ở giai đoạn đầu.

Câu hỏi thường gặp

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

JSON hỗ trợ sáu kiểu: chuỗi (trong dấu ngoặc kép), số (nguyên và dấu phẩy động), boolean (true/false), null, đối tượng (cặp khóa-giá trị trong {}) và mảng (danh sách giá trị trong []). Điều này đủ cho bất kỳ cấu trúc dữ liệu nào trong ứng dụng.

Có thể sử dụng chú thích trong JSON không?

Không, tiêu chuẩn JSON không hỗ trợ chú thích. Nếu bạn cần chú thích, hãy sử dụng JSON5 (JSON mở rộng) hoặc thêm trường mô tả, ví dụ “_comment”: “giải thích”. Một số công cụ, như VS Code, hỗ trợ chú thích trong tệp JSON cấu hình, nhưng đây là phần mở rộng không tiêu chuẩn.

JSON khác JSONB trong PostgreSQL như thế nào?

JSONB là định dạng lưu trữ nhị phân cho JSON trong PostgreSQL. Không giống như JSON dạng văn bản, JSONB xử lý nhanh hơn, hỗ trợ lập chỉ mục (chỉ mục GIN) và đảm bảo tính duy nhất của khóa. Tuy nhiên, JSONB chiếm nhiều dung lượng đĩa hơn do siêu dữ liệu được thêm vào.

Làm thế nào để kiểm tra JSON có hợp lệ không?

Sử dụng JSONLint (jsonlint.com) để kiểm tra nhanh, JSON.parse() tích hợp sẵn trong JavaScript với try-catch, hoặc plugin IDE. Xác thực bao gồm kiểm tra dấu ngoặc đúng, đóng ngoặc và tuân thủ kiểu. Đối với lược đồ phức tạp, hãy sử dụng JSON Schema Validator.

Kích thước tối đa của tệp JSON là bao nhiêu?

Không có giới hạn trong đặc tả JSON. Trong thực tế, kích thước bị giới hạn bởi bộ nhớ thiết bị và khả năng của trình phân tích. Đối với ứng dụng di động, khuyến nghị không vượt quá 1-2 MB cho mỗi phản hồi và đối với dữ liệu lớn, hãy sử dụng phân trang hoặc truyền phát trực tuyến.

Tổng kết

  • JSON — định dạng văn bản tối giản với sáu kiểu dữ liệu để trao đổi thông tin có cấu trúc
  • Độc lập ngôn ngữ — trình phân tích JSON tồn tại cho tất cả ngôn ngữ lập trình phổ biến
  • API REST sử dụng JSON làm định dạng tiêu chuẩn cho yêu cầu và phản hồi trong ứng dụng di động
  • Phân tích được thực hiện bằng công cụ tích hợp: Gson/Moshi trên Android, Codable trên iOS
  • JSON nhỏ gọn hơn XML 2-3 lần, nhưng kém hơn Protobuf về hiệu suất
  • Khả năng đọc của con người — cú pháp dễ đọc và gỡ lỗi mà không cần công cụ đặc biệt
  • JSON Schema — công cụ bổ sung để xác thực cấu trúc và kiểu dữ liệu

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm