Whiz Tools

Định dạng JSON

Định dạng và làm đẹp JSON của bạn với công cụ đơn giản này

JSON đã định dạng sẽ xuất hiện ở đây...

Định dạng JSON

Giới thiệu

JSON (JavaScript Object Notation) là một định dạng trao đổi dữ liệu nhẹ, đã trở thành tiêu chuẩn cho việc trao đổi dữ liệu trong các ứng dụng web. Mặc dù đơn giản, dữ liệu JSON có thể trở nên khó đọc khi bị nén hoặc thiếu định dạng thích hợp. Công cụ này giúp bạn chuyển đổi các chuỗi JSON thô, không định dạng thành một định dạng có cấu trúc tốt, thụt lề, dễ đọc và phân tích hơn.

Định dạng JSON (còn được gọi là "in đẹp") thêm thụt lề nhất quán, ngắt dòng và khoảng cách để làm cho cấu trúc phân cấp của dữ liệu JSON trở nên rõ ràng về mặt hình ảnh. Điều này đặc biệt có giá trị khi làm việc với các đối tượng lồng ghép phức tạp hoặc tập dữ liệu lớn, nơi mà các mối quan hệ giữa các phần tử có thể khó nhận biết.

Công cụ định dạng JSON của chúng tôi cung cấp một giao diện đơn giản để làm đẹp dữ liệu JSON của bạn với định dạng thụt lề thích hợp và cấu trúc, làm cho nó dễ đọc hơn cho con người trong khi vẫn giữ tính hợp lệ cho máy móc.

Cú pháp và cấu trúc JSON

JSON được xây dựng trên hai cấu trúc chính:

  1. Đối tượng: Bộ sưu tập các cặp tên/giá trị được bao quanh bởi dấu ngoặc nhọn {}. Mỗi tên được theo sau bởi một dấu hai chấm : và các cặp được phân tách bằng dấu phẩy ,.
   {"name": "John", "age": 30, "city": "New York"}
   
  1. Mảng: Danh sách có thứ tự các giá trị được bao quanh bởi dấu ngoặc vuông []. Các giá trị được phân tách bằng dấu phẩy ,.
   ["apple", "banana", "cherry"]
   

Giá trị JSON có thể là:

  • Chuỗi (trong dấu ngoặc kép): "Hello World"
  • Số: 42 hoặc 3.14159
  • Boolean: true hoặc false
  • Null: null
  • Đối tượng: {"key": "value"}
  • Mảng: [1, 2, 3]

JSON hợp lệ phải tuân theo các quy tắc cú pháp này:

  • Tên phải là chuỗi trong dấu ngoặc kép
  • Giá trị phải là một trong các kiểu dữ liệu JSON hợp lệ
  • Không có dấu phẩy thừa
  • Không được phép có chú thích
  • Không được phép có hàm hoặc phương thức

Các lỗi cú pháp phổ biến bao gồm:

  • Thiếu hoặc không khớp dấu ngoặc/dấu ngoặc nhọn
  • Thiếu dấu ngoặc kép xung quanh tên thuộc tính
  • Sử dụng dấu ngoặc đơn thay vì dấu ngoặc kép
  • Bao gồm dấu phẩy thừa
  • Sử dụng giá trị không xác định

Cách thức hoạt động của định dạng JSON

Định dạng JSON chuyển đổi JSON nén, không định dạng thành một hình thức dễ đọc hơn bằng cách:

  1. Phân tích: Chuỗi JSON trước tiên được phân tích để đảm bảo nó hợp lệ và tạo ra một đại diện trong bộ nhớ của cấu trúc dữ liệu.

  2. Thụt lề: Mỗi cấp độ lồng ghép của các đối tượng và mảng được thụt lề (thường là 2 hoặc 4 khoảng trắng) để thể hiện cấu trúc phân cấp một cách trực quan.

  3. Ngắt dòng: Các dòng mới được thêm vào sau mỗi thuộc tính hoặc phần tử mảng để cải thiện khả năng đọc.

  4. Khoảng cách: Khoảng cách nhất quán được thêm vào xung quanh dấu hai chấm và dấu phẩy.

Ví dụ, JSON nén này:

{"name":"John Doe","age":30,"address":{"street":"123 Main St","city":"Anytown","state":"CA"},"hobbies":["reading","hiking","photography"]}

Trở thành JSON được định dạng như sau:

{
  "name": "John Doe",
  "age": 30,
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "CA"
  },
  "hobbies": [
    "reading",
    "hiking",
    "photography"
  ]
}

Công cụ của chúng tôi sử dụng thụt lề tiêu chuẩn là 2 khoảng trắng cho mỗi cấp độ, đây là một quy ước phổ biến trong cộng đồng phát triển và cung cấp sự cân bằng tốt giữa độ gọn gàng và khả năng đọc.

Xác thực JSON

Một khía cạnh quan trọng của định dạng JSON là xác thực. Trước khi JSON có thể được định dạng, nó phải hợp lệ về mặt cú pháp theo đặc tả JSON. Các lỗi xác thực phổ biến bao gồm:

  1. Lỗi cú pháp:

    • Tên thuộc tính không được đặt trong dấu ngoặc kép
    • Thiếu hoặc thừa dấu phẩy
    • Cấu trúc lồng ghép không đúng
    • Chuỗi, đối tượng hoặc mảng không được đóng
  2. Lỗi kiểu dữ liệu:

    • Sử dụng các giá trị cụ thể của JavaScript như undefined hoặc NaN
    • Bao gồm hàm hoặc phương thức
    • Sử dụng dấu ngoặc đơn cho chuỗi

Khi bạn gặp JSON không hợp lệ, thông báo lỗi có thể giúp xác định vấn đề. Hầu hết các trình phân tích JSON sẽ chỉ ra vị trí mà việc phân tích thất bại, điều này có thể giúp xác định vấn đề. Công cụ của chúng tôi cung cấp thông báo lỗi rõ ràng để giúp bạn xác định và sửa chữa các vấn đề trong dữ liệu JSON của bạn.

Các trường hợp sử dụng

Định dạng JSON có giá trị trong nhiều kịch bản:

Phát triển và kiểm tra API

Khi làm việc với các API RESTful, JSON được định dạng giúp dễ dàng:

  • Kiểm tra nội dung phản hồi
  • Gỡ lỗi thân yêu cầu
  • Tài liệu ví dụ API
  • Xác minh cấu trúc dữ liệu phù hợp với mong đợi

Quản lý cấu hình

Nhiều ứng dụng hiện đại sử dụng JSON cho cấu hình:

  • Tệp cài đặt ứng dụng
  • Cấu hình môi trường
  • Đặc tả xây dựng và triển khai
  • Mẫu hạ tầng dưới dạng mã (ví dụ: AWS CloudFormation, Terraform)

Phân tích và trực quan hóa dữ liệu

Định dạng JSON giúp khi:

  • Khám phá tập dữ liệu
  • Chuẩn bị dữ liệu cho trực quan hóa
  • Hiểu các sơ đồ dữ liệu
  • Xác định các mẫu trong dữ liệu có cấu trúc

Gỡ lỗi và xử lý sự cố

Định dạng JSON đúng là rất cần thiết khi:

  • Gỡ lỗi ứng dụng web
  • Kiểm tra localStorage hoặc sessionStorage
  • Phân tích phản hồi mạng
  • Xử lý sự cố tích hợp dữ liệu

Mục đích giáo dục

Định dạng JSON rõ ràng có giá trị cho:

  • Dạy các cấu trúc dữ liệu
  • Trình bày các mối quan hệ lồng ghép
  • Giải thích các khái niệm API
  • Minh họa các nguyên tắc mô hình hóa dữ liệu

Các lựa chọn thay thế

Mặc dù công cụ định dạng JSON dựa trên web của chúng tôi thuận tiện cho các tác vụ định dạng nhanh, nhưng có một số lựa chọn thay thế cho các kịch bản khác nhau:

Công cụ phát triển trình duyệt

Các trình duyệt hiện đại bao gồm khả năng định dạng JSON:

  • DevTools của Chrome và Edge tự động định dạng các phản hồi JSON trong tab Mạng
  • Trình xem JSON của Firefox cung cấp một chế độ xem cây tương tác
  • Các tiện ích mở rộng trình duyệt như JSONView có thể định dạng JSON trực tiếp trong trình duyệt

Trình soạn thảo mã và IDE

Hầu hết các môi trường phát triển cung cấp định dạng JSON:

  • Visual Studio Code có định dạng JSON tích hợp sẵn (Alt+Shift+F)
  • Các IDE của JetBrains (WebStorm, IntelliJ) bao gồm các công cụ JSON mạnh mẽ
  • Sublime Text và Atom hỗ trợ định dạng JSON thông qua các plugin

Công cụ dòng lệnh

Đối với người dùng terminal hoặc tự động hóa:

  • jq là một bộ xử lý JSON mạnh mẽ trên dòng lệnh
  • json_pp được cài đặt sẵn trên nhiều hệ thống Unix
  • python -m json.tool cung cấp định dạng nhanh bằng Python

Cách tiếp cận lập trình

Khi định dạng JSON trong các ứng dụng:

// Định dạng JSON trong JavaScript
const formatted = JSON.stringify(jsonObject, null, 2);
# Định dạng JSON trong Python
import json
formatted = json.dumps(json_object, indent=2)
// Định dạng JSON trong Java với Gson
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String formatted = gson.toJson(jsonObject);
# Định dạng JSON trong Ruby
require 'json'
formatted = JSON.pretty_generate(json_object)
// Định dạng JSON trong PHP
$formatted = json_encode($jsonObject, JSON_PRETTY_PRINT);

Lịch sử

JSON được tạo ra bởi Douglas Crockford vào đầu những năm 2000 như một sự thay thế nhẹ cho XML. Định dạng này được phát triển từ cú pháp đối tượng của JavaScript nhưng được thiết kế để độc lập với ngôn ngữ. Vào năm 2006, JSON được xác định chính thức trong RFC 4627, và nó nhanh chóng trở nên phổ biến nhờ sự đơn giản và tương thích với JavaScript.

Trước JSON, XML là định dạng thống trị cho việc trao đổi dữ liệu, nhưng tính dài dòng và phức tạp của nó khiến nó trở nên c cumbersome cho nhiều ứng dụng. JSON cung cấp một cú pháp ngắn gọn hơn mà dễ đọc và viết hơn, cả cho con người và máy móc. Nó cũng hoàn toàn phù hợp với mô hình đối tượng của JavaScript, khiến nó trở thành lựa chọn tự nhiên cho các ứng dụng web.

Sự chấp nhận JSON đã tăng tốc với sự gia tăng của AJAX và các API RESTful vào giữa những năm 2000. Đến những năm 2010, nó đã trở thành tiêu chuẩn de facto cho các API web, tệp cấu hình và lưu trữ dữ liệu trong các cơ sở dữ liệu NoSQL như MongoDB và CouchDB.

Ngày nay, JSON được hỗ trợ bởi hầu hết mọi ngôn ngữ lập trình và được sử dụng trong vô số ứng dụng trên web. Sự đơn giản, linh hoạt và hỗ trợ toàn cầu của nó đã khiến nó trở thành một trong những định dạng dữ liệu quan trọng nhất trong tính toán hiện đại.

Ví dụ mã

Dưới đây là các ví dụ về cách định dạng JSON trong các ngôn ngữ lập trình khác nhau:

// Định dạng JSON trong JavaScript
function formatJSON(jsonString) {
  try {
    const parsedData = JSON.parse(jsonString);
    return JSON.stringify(parsedData, null, 2);
  } catch (error) {
    return `Lỗi: ${error.message}`;
  }
}

// Ví dụ sử dụng
const rawJSON = '{"name":"John","age":30,"city":"New York"}';
console.log(formatJSON(rawJSON));
# Định dạng JSON trong Python
import json

def format_json(json_string):
    try:
        parsed_data = json.loads(json_string)
        return json.dumps(parsed_data, indent=2)
    except json.JSONDecodeError as e:
        return f"Lỗi: {str(e)}"

# Ví dụ sử dụng
raw_json = '{"name":"John","age":30,"city":"New York"}'
print(format_json(raw_json))
// Định dạng JSON trong Java với Gson
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;

public class JSONFormatter {
    public static String formatJSON(String jsonString) {
        try {
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            Object parsedJson = gson.fromJson(jsonString, Object.class);
            return gson.toJson(parsedJson);
        } catch (JsonSyntaxException e) {
            return "Lỗi: " + e.getMessage();
        }
    }
    
    public static void main(String[] args) {
        String rawJSON = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";
        System.out.println(formatJSON(rawJSON));
    }
}
// Định dạng JSON trong PHP
function formatJSON($jsonString) {
    $result = json_decode($jsonString);
    if (json_last_error() !== JSON_ERROR_NONE) {
        return "Lỗi: " . json_last_error_msg();
    }
    return json_encode($result, JSON_PRETTY_PRINT);
}

// Ví dụ sử dụng
$rawJSON = '{"name":"John","age":30,"city":"New York"}';
echo formatJSON($rawJSON);
# Định dạng JSON trong Ruby
require 'json'

def format_json(json_string)
  begin
    parsed_data = JSON.parse(json_string)
    return JSON.pretty_generate(parsed_data)
  rescue JSON::ParserError => e
    return "Lỗi: #{e.message}"
  end
end

# Ví dụ sử dụng
raw_json = '{"name":"John","age":30,"city":"New York"}'
puts format_json(raw_json)
// Định dạng JSON trong C# với Newtonsoft.Json
using Newtonsoft.Json;
using System;

class JSONFormatter
{
    public static string FormatJSON(string jsonString)
    {
        try
        {
            object parsedJson = JsonConvert.DeserializeObject(jsonString);
            return JsonConvert.SerializeObject(parsedJson, Formatting.Indented);
        }
        catch (JsonException e)
        {
            return $"Lỗi: {e.Message}";
        }
    }
    
    static void Main()
    {
        string rawJSON = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";
        Console.WriteLine(FormatJSON(rawJSON));
    }
}
// Định dạng JSON trong Go
package main

import (
    "encoding/json"
    "fmt"
)

func formatJSON(jsonString string) string {
    var parsedData interface{}
    err := json.Unmarshal([]byte(jsonString), &parsedData)
    if err != nil {
        return fmt.Sprintf("Lỗi: %s", err.Error())
    }
    
    formattedBytes, err := json.MarshalIndent(parsedData, "", "  ")
    if err != nil {
        return fmt.Sprintf("Lỗi: %s", err.Error())
    }
    
    return string(formattedBytes)
}

func main() {
    rawJSON := `{"name":"John","age":30,"city":"New York"}`
    fmt.Println(formatJSON(rawJSON))
}

Các trường hợp biên và xem xét

Khi làm việc với định dạng JSON, hãy lưu ý những thách thức tiềm ẩn này:

Tệp JSON lớn

Các tệp JSON rất lớn (vài megabyte hoặc hơn) có thể gây ra vấn đề về hiệu suất trong các công cụ định dạng dựa trên trình duyệt. Đối với các trường hợp như vậy:

  • Cân nhắc sử dụng các công cụ dòng lệnh như jq
  • Chia nhỏ JSON thành các phần nhỏ hơn
  • Sử dụng các bộ phân tích theo luồng để xử lý mà không cần tải toàn bộ tệp vào bộ nhớ

Cấu trúc lồng ghép sâu

JSON lồng ghép cực kỳ sâu (hơn 10-20 cấp độ) có thể trở nên khó điều hướng ngay cả khi được định dạng. Trong những trường hợp này:

  • Cân nhắc làm phẳng cấu trúc nếu có thể
  • Sử dụng các trình xem JSON có thể gập lại
  • Trích xuất và làm việc với các phần cụ thể của JSON

Ký tự đặc biệt và Unicode

JSON hỗ trợ Unicode, nhưng một số công cụ định dạng có thể gặp vấn đề với một số ký tự:

  • Đảm bảo công cụ định dạng của bạn xử lý đúng emoji và các ký tự Unicode khác
  • Cẩn thận với các ký tự điều khiển và các chuỗi thoát
  • Xác minh rằng đầu ra được định dạng giữ nguyên tất cả các ký tự gốc

Độ chính xác số

JSON không xác định độ chính xác cho các số, điều này có thể dẫn đến các vấn đề với các số nguyên rất lớn hoặc giá trị số thực:

  • Hãy lưu ý rằng một số triển khai JavaScript có thể mất độ chính xác cho các số nguyên vượt quá 53 bit
  • Cân nhắc sử dụng các đại diện chuỗi cho các giá trị số chính xác
  • Kiểm tra với các giá trị cực đoan nếu ứng dụng của bạn yêu cầu độ chính xác cao

Đối tượng và mảng trống

JSON hợp lệ bao gồm các đối tượng trống {} và mảng [], cần được định dạng đúng:

  • Các đối tượng trống nên xuất hiện dưới dạng {}
  • Các mảng trống nên xuất hiện dưới dạng []
  • Các cấu trúc lồng ghép trống nên duy trì thụt lề đúng

Tài liệu tham khảo

  1. JSON.org - Trang web đặc tả chính thức của JSON
  2. RFC 8259 - Định dạng trao đổi dữ liệu JSON
  3. MDN Web Docs: JSON - Tài liệu toàn diện về JSON trong JavaScript
  4. JSON Lint - Một công cụ xác thực JSON phổ biến
  5. jq - Một bộ xử lý JSON nhẹ và linh hoạt trên dòng lệnh
Feedback