CodeGym /Các khóa học /C# SELF /Những nguyên tắc cơ bản về định dạng JSON và sự phổ biến...

Những nguyên tắc cơ bản về định dạng JSON và sự phổ biến của nó

C# SELF
Mức độ, Bài học
Có sẵn

1. Giới thiệu

Nếu bạn đã từng mở các API hiện đại, làm việc với web-service, ứng dụng di động hoặc thậm chí chỉ cố gắng lưu thứ gì đó ở "định dạng chung" — bạn đã gặp hoặc sẽ gặp JSON. Đây là định dạng kết nối nhiều ngôn ngữ lập trình và nền tảng khác nhau: C#, JavaScript, Python — tất cả đều "nói" với nhau bằng JSON.

Tại sao JSON trở thành ngôi sao của serialization? Câu trả lời đơn giản: nó là định dạng text nhẹ, dễ đọc với con người và gọn. Sự phổ biến đến từ sự kết hợp giữa đơn giản, tính đa dụng và hỗ trợ tốt trong các ngôn ngữ lập trình.

JSON là gì?

JSON là viết tắt của JavaScript Object Notation. Định dạng xuất phát từ JavaScript, nhưng nhanh chóng ra khỏi trình duyệt đi vào thế giới lớn hơn. Lưu ý: mặc dù tên có JavaScript, JSON không phụ thuộc vào JavaScript và tiện dụng với mọi ngôn ngữ lập trình.

Định dạng này được Douglas Crockford sáng tạo đầu những năm 2000 như một thay thế đơn giản hơn cho XML dài dòng. Ý tưởng đơn giản: "JSON ngắn hơn, dễ hơn và dễ đọc hơn bằng mắt".

2. Quy tắc cơ bản của định dạng JSON

Quan trọng nhất: JSON là một định dạng text được định nghĩa chặt chẽ cho dữ liệu có cấu trúc. Không có phép thuật, chỉ là text bình thường, mở ở bất kỳ editor nào.

Cấu trúc cơ bản:

  • Mảng (arrays): danh sách giá trị có thứ tự.
  • Đối tượng (objects): tập các cặp khóa-giá trị.
  • Kiểu đơn: string, số, boolean (true, false) và giá trị đặc biệt null.

Ví dụ tài liệu JSON tối thiểu:

{
    "name": "Ivan",
    "age": 25,
    "isStudent": true,
    "scores": [5, 4, 5, 3],
    "contacts": {
        "email": "ivan@example.com",
        "phone": null
    }
}

Cấu trúc khái quát

Dưới đây là bảng tương ứng giữa kiểu C# và biểu diễn trong JSON:

Kiểu C# Ví dụ JSON
string
"name": "Ivan"
int, double
"score": 5
bool
"isStudent": true
mảng (int[], ...)
"scores": [5,4,5,3]
đối tượng (class, ...)
"contacts": { ... }
null
"phone": null

Quy tắc ghi JSON

  1. Chuỗi luôn trong dấu ngoặc kép đôi: 'text' — sai, đúng là "text".
  2. Khóa của đối tượng — chuỗi trong ngoặc kép đôi: ví dụ "name": ...
  3. Dấu phẩy chỉ nằm giữa các phần tử, không có dấu phẩy cuối cùng sau phần tử cuối cùng.
  4. Thụt lề không bắt buộc, nhưng giúp đọc dễ hơn.
  5. Số không có ngoặc kép: "age": 25, không phải "age": "25".
  6. Boolean là true/false (không có ngoặc kép), không phải True, FALSE hay "true".
  7. null viết là null (không có ngoặc kép).

3. JSON dưới góc nhìn lập trình viên

Tương tự với các kiểu C#:

  • Đối tượng JSON ≈ Dictionary<string, object>
  • Mảng JSON ≈ T[] hoặc List<T>
  • Chuỗi JSON ≈ chuỗi bình thường
  • Số JSON ≈ int hoặc double (tùy giá trị)

Ví dụ serial hóa một đối tượng thành JSON

Class:

public class Student
{
    public string Name { get; set; } = "";
    public int Age { get; set; }
    public bool IsStudent { get; set; }
    public int[] Scores { get; set; } = Array.Empty<int>();
}

JSON thu được (đơn giản hóa, chi tiết serialization ở sau):

{
    "Name": "Ivan",
    "Age": 25,
    "IsStudent": true,
    "Scores": [5, 4, 5, 3]
}

4. Ví dụ các cấu trúc JSON hợp lệ

Đối tượng có mảng và các đối tượng lồng nhau

{
  "product": "Cà phê",
  "price": 125.50,
  "inStock": true,
  "attributes": {
    "weight": 500,
    "unit": "gr"
  },
  "tags": ["đồ uống", "năng lượng", "arabica"],
  "promotions": null
}

Mảng các đối tượng

[
  {"id": 1, "name": "Petya"},
  {"id": 2, "name": "Masha"},
  {"id": 3, "name": "Vasya"}
]

5. Ví dụ JSON không hợp lệ (và vì sao)

Dấu nháy đơn:

{ 'name': 'Ivan' } // Lỗi!

JSON yêu cầu dấu ngoặc kép đôi.

Dấu phẩy sau phần tử cuối:

{ "x": 1, "y": 2, } // Lỗi!

Dấu phẩy thừa ở cuối không được phép.

Comments:

{
  // Đẹp nhưng tiếc là không hoạt động trong JSON
  "name": "Ivan"
}

JSON không có comment.

6. Tại sao JSON cần thiết trong dự án thực tế?

Truyền dữ liệu giữa hệ thống

JSON là "ngôn ngữ chung" giữa các chương trình khác nhau, thường qua HTTP. Ví dụ server viết bằng C# giao tiếp với frontend bằng JavaScript — định dạng chung là JSON.

Lưu cấu hình và dữ liệu

Nhiều ứng dụng lưu cấu hình dưới file .json. Ví dụ appsettings.json — tiêu chuẩn cho ứng dụng .NET. Ưu điểm: dễ đọc, dễ chỉnh sửa và dễ version.

API server và mobile

Phần lớn REST API dùng JSON làm format request/response: ví dụ danh sách user trả về dưới dạng mảng đối tượng.

Cấu hình tool và thư viện

Nhiều tool trong .NET (Serilog, Swagger, ...) dùng JSON cho cấu hình. XML ngày càng ít dùng — JSON gọn hơn và trực quan hơn.

7. Sự phổ biến của JSON: tại sao mọi người thích nó?

  • Dễ đọc. Ngay cả người không phải dev cũng hiểu nhanh.
  • Tiện truyền qua mạng. Text thông thường, nhẹ.
  • Được hỗ trợ trên mọi ngôn ngữ. Serialization/deserialization có sẵn.
  • Tiện cho cấu hình. Các editor làm việc tốt với nó.
  • Dễ tạo ra. Sinh JSON thì rất đơn giản.
  • Mảng, lồng nhau, null. Mọi thứ trực quan, không bị "bội thực ngoặc" như XML.

Khi nào nên chọn JSON?

  • Bạn làm app mobile hoặc web;
  • Làm việc với API bên ngoài;
  • Muốn app thân thiện với tích hợp trong tương lai.

8. C# làm việc với JSON như thế nào

Tóm tắt về các thư viện .NET phổ biến:

Ví dụ tối thiểu serialize/deserialize:

using System.Text.Json;

// Chuyển đối tượng thành chuỗi JSON
var student = new Student { Name = "Ivan", Age = 25, IsStudent = true, Scores = new[] {5, 4, 5, 3} };
string json = JsonSerializer.Serialize(student);

// Và ngược lại: đọc đối tượng từ chuỗi JSON
Student? parsed = JsonSerializer.Deserialize<Student>(json);

Console.WriteLine(json);

9. Lỗi thường gặp của người mới khi làm việc với JSON

Lỗi phổ biến — nhầm dấu ngoặc kép hoặc quên dấu phẩy. Đôi khi muốn thêm comment (như trong C# — tiện mà!), nhưng JSON không cho phép.

Một tình huống thường gặp nữa — serialize đối tượng có collection chưa được khởi tạo: kết quả sẽ là "scores": null thay vì mảng mong đợi. Hãy khởi tạo collection trước.

Hãy nhớ, JSON là text: dữ liệu lớn chiếm nhiều bộ nhớ. Nếu serialize khoảng 500 MB thành JSON, ứng dụng có thể bị ảnh hưởng hiệu năng rõ rệt.

2
Nhiệm vụ
C# SELF, mức độ, bài học
Đã khóa
Đọc dữ liệu từ file nhị phân
Đọc dữ liệu từ file nhị phân
1
Khảo sát/đố vui
, cấp độ , bài học
Không có sẵn
Làm quen với serialization
Khái niệm về serialization dữ liệu
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION