Công nghệ8 phút đọc

JSON Là Gì? Hướng Dẫn Format, Validate Và Debug JSON Cho Developer

Tìm hiểu JSON từ cơ bản đến nâng cao. Cú pháp JSON, các lỗi phổ biến, cách format/validate/minify, và ứng dụng trong API, config, database. Có ví dụ code thực tế.

DedevTool

JSON Là Gì? Hướng Dẫn Format, Validate Và Debug JSON Cho Developer

JSON Là Gì? Hướng Dẫn Format, Validate Và Debug JSON Cho Developer

Nếu bạn là developer – dù frontend, backend, mobile hay data – bạn làm việc với JSON mỗi ngày. Nhưng bạn có thực sự hiểu JSON sâu? Bạn có biết tại sao JSON thắng XML? Hay tại sao dấu phẩy cuối cùng (trailing comma) lại gây crash API?

Bài viết này không chỉ là "JSON là gì" – mà là tất cả những gì developer cần biết để làm việc hiệu quả với JSON trong thực tế 2026.


1. JSON Là Gì?

JSON (JavaScript Object Notation) là định dạng dữ liệu dạng text, dùng để trao đổi dữ liệu giữa client và server, giữa các hệ thống khác nhau.

{
  "name": "Nguyễn Văn A",
  "age": 28,
  "email": "a@example.com",
  "isActive": true,
  "skills": ["JavaScript", "Python", "Go"],
  "address": {
    "city": "Hồ Chí Minh",
    "country": "Vietnam"
  }
}

Tại Sao JSON Thắng XML?

Tiêu chíJSONXML
Cú phápNgắn gọn, dễ đọcDài dòng, nhiều tag
Kích thướcNhỏ hơn ~30–50%Lớn hơn
Parse speedNhanh (native JS)Chậm hơn
Hỗ trợMọi ngôn ngữMọi ngôn ngữ
Năm ra đời2001 (Douglas Crockford)1996

JSON nhỏ hơn, nhanh hơn, dễ đọc hơn. Vì vậy 99% API REST hiện đại dùng JSON thay vì XML.


2. Cú Pháp JSON – 7 Quy Tắc Sống Còn

Quy tắc 1: Key PHẢI nằm trong dấu ngoặc kép

// ✅ Đúng
{ "name": "value" }

// ❌ Sai - key không có ngoặc kép
{ name: "value" }

// ❌ Sai - dùng ngoặc đơn
{ 'name': 'value' }

Quy tắc 2: String PHẢI dùng ngoặc kép (không phải ngoặc đơn)

// ✅ Đúng
{ "city": "Hà Nội" }

// ❌ Sai
{ "city": 'Hà Nội' }

Quy tắc 3: Không có trailing comma

// ✅ Đúng
{ "a": 1, "b": 2 }

// ❌ Sai - dấu phẩy sau phần tử cuối
{ "a": 1, "b": 2, }

Đây là lỗi phổ biến nhất khi viết JSON bằng tay. JavaScript cho phép trailing comma, nhưng JSON thì KHÔNG.

Quy tắc 4: Chỉ có 6 kiểu dữ liệu

KiểuVí dụ
String"hello"
Number42, 3.14, -1, 1e10
Booleantrue, false
Nullnull
Object{ "key": "value" }
Array[1, 2, 3]

Không có: undefined, NaN, Infinity, Date, RegExp, comment, function.

Quy tắc 5: Không có comment

// ❌ JSON không hỗ trợ comment
{
  "name": "value" // This will cause error
}

Nếu cần comment trong config file, dùng JSON5 hoặc JSONC (được VS Code hỗ trợ).

Quy tắc 6: Số không có leading zero

// ✅ Đúng
{ "price": 0.5 }

// ❌ Sai
{ "price": 00.5 }
{ "price": 007 }

Quy tắc 7: Unicode escape cho ký tự đặc biệt

{ "emoji": "\u2764" }  // ❤️
{ "tab": "col1\tcol2" }
{ "newline": "line1\nline2" }

Format và validate JSON tự động: 👉 JSON Formatter & Validator


3. Các Lỗi JSON Phổ Biến Và Cách Fix

Lỗi 1: "Unexpected token"

Nguyên nhân: Trailing comma, thiếu ngoặc kép, hoặc ký tự không hợp lệ.

// ❌ Lỗi
{
  "items": [1, 2, 3,],
  "status": active
}

// ✅ Fix
{
  "items": [1, 2, 3],
  "status": "active"
}

Lỗi 2: "Unexpected end of JSON input"

Nguyên nhân: Thiếu ngoặc đóng } hoặc ], hoặc string rỗng.

// ❌ Crash
JSON.parse("")

// ✅ Fix
JSON.parse("{}") // hoặc check trước khi parse
const data = input ? JSON.parse(input) : {};

Lỗi 3: Circular reference khi serialize

const a = {};
const b = { ref: a };
a.ref = b;

// ❌ TypeError: Converting circular structure to JSON
JSON.stringify(a);

// ✅ Fix - dùng replacer
JSON.stringify(a, (key, value) => {
  if (key === 'ref') return '[Circular]';
  return value;
});

Lỗi 4: Date bị serialize thành string

const data = { date: new Date() };
const json = JSON.stringify(data);
// {"date":"2026-04-19T10:30:00.000Z"}

const parsed = JSON.parse(json);
parsed.date instanceof Date; // false! Nó là string

// ✅ Fix - dùng reviver
const parsed2 = JSON.parse(json, (key, value) => {
  if (key === 'date') return new Date(value);
  return value;
});

4. JSON Trong API – Best Practices 2026

Request/Response Format

// ✅ API Response chuẩn (success)
{
  "status": "success",
  "data": {
    "users": [
      { "id": 1, "name": "Nguyễn Văn A" },
      { "id": 2, "name": "Trần Thị B" }
    ],
    "total": 2,
    "page": 1,
    "perPage": 20
  }
}

// ✅ API Response chuẩn (error)
{
  "status": "error",
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Email is required",
    "details": [
      { "field": "email", "message": "Must be a valid email" }
    ]
  }
}

Naming Convention

ConventionVí dụDùng trong
camelCasefirstName, createdAtJavaScript, TypeScript
snake_casefirst_name, created_atPython, Ruby, PostgreSQL
kebab-casefirst-name❌ Không dùng trong JSON

Quy tắc: Chọn một convention và dùng nhất quán trong toàn bộ API. Không mix firstNamelast_name trong cùng response.


5. JSON vs Các Format Khác

FormatKhi nào dùngƯu điểm
JSONAPI, config đơn giảnPhổ biến, native JS
YAMLConfig phức tạp (Docker, K8s)Đọc dễ hơn JSON, hỗ trợ comment
TOMLConfig (Rust, Python)Rõ ràng, không bị indent hell
Protocol BuffersgRPC, hiệu suất caoNhỏ 3–10x, nhanh 20–100x so JSON
MessagePackCache, WebSocketBinary, nhỏ hơn JSON 30%
CSVData tabularExcel mở được

6. Tool Hữu Ích Cho Developer

Format JSON (đẹp hóa)

Khi nhận JSON một dòng từ API log:

{"user":{"id":1,"name":"Test","roles":["admin","editor"],"settings":{"lang":"vi","theme":"dark"}}}

Sau khi format:

{
  "user": {
    "id": 1,
    "name": "Test",
    "roles": ["admin", "editor"],
    "settings": {
      "lang": "vi",
      "theme": "dark"
    }
  }
}

Minify JSON (nén)

Giảm 30–50% kích thước bằng cách bỏ whitespace – hữu ích cho:

  • Lưu vào database
  • Gửi qua WebSocket
  • Giảm bandwidth API

Validate JSON

Kiểm tra JSON có hợp lệ hay không trước khi deploy. Một trailing comma có thể crash toàn bộ production config.

Tất cả các thao tác trên trong một công cụ: 👉 JSON Formatter, Validator & Minifier


7. JSON Schema – Type Safety Cho JSON

JSON Schema giúp validate cấu trúc JSON tự động:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": { "type": "string", "minLength": 1 },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 },
    "email": { "type": "string", "format": "email" }
  },
  "required": ["name", "email"]
}

Khi nào dùng JSON Schema:

  • Validate API request body
  • Config file validation (CI/CD)
  • Form validation (React Hook Form + Zod compile to JSON Schema)

8. Performance Tips

Parse lớn → Dùng streaming parser

Với JSON > 100MB, JSON.parse() sẽ block event loop. Dùng streaming:

// Node.js
import { parser } from 'stream-json';
import { streamArray } from 'stream-json/streamers/StreamArray';

fs.createReadStream('huge-file.json')
  .pipe(parser())
  .pipe(streamArray())
  .on('data', ({ value }) => processItem(value));

Serialize nhanh hơn JSON.stringify

Thư viện fast-json-stringify nhanh hơn 2–10x nếu bạn biết schema trước:

const stringify = fastJson({
  type: 'object',
  properties: {
    name: { type: 'string' },
    age: { type: 'integer' }
  }
});

stringify({ name: 'Test', age: 28 }); // 2-10x faster

9. Câu Hỏi Thường Gặp

JSON có giống JavaScript Object không?

Gần giống nhưng KHÔNG giống nhau. JavaScript Object cho phép: trailing comma, key không ngoặc kép, single quote, undefined, function, Symbol. JSON thì không.

Làm sao thêm comment vào JSON?

Dùng JSONC (đổi extension thành .jsonc) hoặc JSON5. VS Code settings.json thực ra là JSONC.

JSON max size là bao nhiêu?

Theo spec: không giới hạn. Trên thực tế, JSON.parse() trong V8 (Chrome/Node.js) xử lý tốt đến ~500MB. Nginx default limit request body 1MB.


Công Cụ JSON Online Miễn Phí

Format, validate, minify trong 1 click – không cần cài extension:

👉 JSON Formatter & Validator – Online Miễn Phí