JSON sang Go
Không có nội dung
Dán JSON vào bên trái, và định nghĩa kiểu struct Go sẵn sàng sử dụng trực tiếp trong dự án Go sẽ tự động được tạo ra ở bên phải. Xử lý cục bộ thuần túy trên trình duyệt, không cần đăng ký hay tải lên.
Không có nội dung
Dán JSON vào bên trái, và định nghĩa kiểu struct Go sẵn sàng sử dụng trực tiếp trong dự án Go sẽ tự động được tạo ra ở bên phải. Xử lý cục bộ thuần túy trên trình duyệt, không cần đăng ký hay tải lên.
JSON sang Go là quá trình tự động chuyển đổi dữ liệu định dạng JSON thành định nghĩa kiểu struct của ngôn ngữ Go. JSON là định dạng trao đổi dữ liệu phổ biến nhất trong REST API, tệp cấu hình, hàng đợi tin nhắn và nhật ký, trong khi Go là ngôn ngữ kiểu mạnh; trong quá trình phát triển, cấu trúc động của JSON thường cần ánh xạ thành struct trước khi giải tuần tự hóa với encoding/json. Viết struct thủ công, đặc biệt là các đối tượng lồng, dễ dẫn đến thiếu trường hoặc sai kiểu; công cụ này nhằm mục đích tự động hóa công việc lặp lại.
Struct của Go là kiểu dữ liệu tổng hợp, được khai báo bằng `type Name struct { ... }`. Mỗi trường bao gồm tên và kiểu; tên trường phải bắt đầu bằng chữ hoa để các gói khác có thể truy cập, gọi là 'định danh xuất'. Công cụ tự động chuyển đổi tên trường JSON thành tên trường xuất PascalCase, ví dụ `user_name` ánh xạ thành `UserName`, với khóa gốc được bảo toàn trong thẻ json.
Chuyển đổi cốt lõi của công cụ này được thực hiện bởi Web Worker jsonFormat trong trình duyệt, gọi trình kết xuất Go của quicktype-core với các tùy chọn `just-types` và `no-comments`. Toàn bộ quy trình không phụ thuộc vào dịch vụ phụ trợ: JSON đầu vào được phân tích cục bộ, kiểu được suy luận, mã Go được tạo, cuối cùng được trình bày trong trình chỉnh sửa bên phải.
Suy luận kiểu tuân theo ánh xạ JSON sang Go thông thường: chuỗi ánh xạ thành `string`, boolean thành `bool`, số nguyên thành `int64`, số thực thành `float64`, mảng thành slice `[]T`, đối tượng thành struct độc lập, `null` thành `interface{}`. Các đối tượng lồng được xử lý đệ quy, duy trì phân cấp rõ ràng.
So với viết thủ công, mã do công cụ tạo là 'bản nháp đầu tiên có thể chạy được'. Các nhà phát triển thường chỉ cần tinh chỉnh tên kiểu gốc, tên gói, độ chính xác kiểu trường (ví dụ int64 thành int) và có sử dụng kiểu con trỏ hay không, trước khi đưa vào dự án Go thực tế. Kết hợp với sao chép một cú nhấp và tải model.go, công việc lặp lại trong giai đoạn tích hợp và mô hình hóa được giảm đáng kể.
Sau khi sao chép struct đã tạo vào dự án, trực tiếp giải tuần tự hóa phản hồi API với encoding/json.
package main
import (
"encoding/json"
"fmt"
)
// 以下代码由 GeekFormat JSON 转 Go 工具生成
type User struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
Address Address `json:"address"`
}
type Address struct {
City string `json:"city"`
}
func main() {
data := []byte(`{
"id": 1,
"name": "Alice",
"tags": ["admin", "dev"],
"address": {"city": "Beijing"}
}`)
var u User
if err := json.Unmarshal(data, &u); err != nil {
panic(err)
}
fmt.Println(u.Name, u.Address.City)
}Nếu một số trường API có thể không tồn tại, thay đổi các trường tương ứng thành kiểu con trỏ hoặc sử dụng với thẻ omitempty.
package main
import "encoding/json"
// 手动将字段改为指针,缺失时值为 nil
type User struct {
ID *int64 `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Email *string `json:"email,omitempty"`
}
func main() {
data := []byte(`{"id": 1, "name": "Bob"}`)
var u User
json.Unmarshal(data, &u)
if u.Email == nil {
println("Email 字段缺失")
}
}Dán nội dung JSON vào hộp nhập liệu bên trái, công cụ sẽ tự động chuyển đổi trong vòng 400ms và hiển thị struct Go đã tạo ở bên phải. Bạn cũng có thể kéo thả tải lên tệp .json/.txt, hoặc nhấp 'Mẫu' để tải dữ liệu tích hợp. Sau khi chuyển đổi, sao chép hoặc tải tệp model.go một cú nhấp.
Có. Công cụ tạo mã Go dựa trên quicktype-core, và theo mặc định mỗi trường struct đi kèm thẻ `json:"tên_trường_gốc"`, thuận tiện cho tuần tự hóa và giải tuần tự hóa trực tiếp với Unmarshal/Marshal của encoding/json.
Có. Mảng JSON tạo các kiểu slice tương ứng dựa trên kiểu phần tử, ví dụ `["a","b"]` tạo `[]string`, `[1,2,3]` tạo `[]int64`, `[{...},{...}]` tạo các kiểu tùy chỉnh như `[]UserItem`.
Có. Mỗi đối tượng lồng đệ quy tạo một kiểu struct độc lập, được đặt tên theo PascalCase. Ví dụ, đối tượng `address` tạo struct `Address`, được tham chiếu trong struct chính thông qua trường `Address Address`.
Giá trị null trong JSON thường được suy luận là `interface{}`, là kiểu dự phòng an toàn. Nếu bạn biết kiểu thực sự của trường, bạn có thể thêm giá trị mẫu trong JSON, tạo lại, sau đó điều chỉnh thủ công thành kiểu cụ thể.
Có. Công cụ sử dụng tên kiểu gốc (như User) theo mặc định; sau khi sửa đổi tên kiểu gốc trong cài đặt, tất cả các tên kiểu con liên quan sẽ cập nhật đồng bộ, tên tệp tải xuống cũng thay đổi tương ứng.
Công cụ tự động phát hiện tính hợp lệ của JSON. Nếu có các lỗi phổ biến như dấu phẩy đuôi, dấu nháy đơn, thiếu dấu nháy, nút 'Sửa JSON' sẽ xuất hiện. Nhấp vào công cụ sẽ cố gắng tự động sửa và tạo lại struct Go; khi sửa thất bại, vị trí lỗi cụ thể sẽ được đưa ra.
Không. Tất cả phân tích JSON, suy luận kiểu và tạo mã Go hoàn thành trong trình duyệt của bạn thông qua Web Worker; nội dung đầu vào và mã được tạo không bao giờ tải lên bất kỳ máy chủ nào, cũng không được ghi lại vào đám mây. JSON nhạy cảm chứa khóa API, token hoặc dữ liệu kinh doanh có thể được sử dụng an toàn.
Có. Mã được tạo là struct Go tiêu chuẩn với thẻ json, có thể sao chép trực tiếp vào thư mục types/ hoặc models/ của dự án. Chúng tôi khuyên bạn nên tinh chỉnh tên kiểu và tên gói theo quy ước đặt tên của dự án.
Hoàn toàn miễn phí, không cần đăng ký hay đăng nhập. Mở trang và sử dụng ngay lập tức, không giới hạn tính năng, hình mờ hay đăng nhập bắt buộc.
Công cụ không có giới hạn kích thước tệp nghiêm ngặt, nhưng tốc độ chuyển đổi và hiệu suất hiển thị phụ thuộc vào hiệu suất trình duyệt và thiết bị. Chúng tôi khuyên bạn nên xử lý JSON trong vòng 1MB để có trải nghiệm tốt nhất; đối với JSON quá lớn, hãy xử lý thông qua công cụ định dạng JSON hoặc chia tách trước.
Không. Công cụ phân biệt số nguyên và số thực: trường số nguyên tạo int64, trường số thực tạo float64. Nếu bạn thích các kiểu cụ thể hơn như int, uint64, hãy thay thế thủ công sau khi tạo.
Hộp nhập liệu bên trái trống hoặc chỉ chứa khoảng trắng. Vui lòng dán JSON hợp lệ, hoặc nhấp 'Mẫu' để tải dữ liệu, hoặc kéo thả tải lên tệp .json/.txt.
Nhấp nút 'Sửa JSON' bên dưới hộp nhập liệu; công cụ sẽ tự động cố gắng sửa dấu phẩy đuôi, dấu nháy đơn, thiếu dấu nháy, đối tượng kiểu JS và các vấn đề khác. Kết quả đã sửa đổi sẽ được làm nổi bật sau khi sửa.
Công cụ tạo tên trường PascalCase từ các khóa JSON. Nếu các khóa chứa tiếng Trung hoặc ký tự đặc biệt, tên trường thoát có thể được tạo. Chúng tôi khuyên bạn nên thay đổi các khóa JSON thành tiếng Anh chữ thường hoặc snake_case, sau đó điều chỉnh đồng bộ sau khi tạo.
Vì null không thể suy luận kiểu cụ thể, công cụ sử dụng interface{} làm dự phòng. Bạn có thể cung cấp cho trường này một giá trị mẫu (như "" hoặc 0) trong JSON nguồn, tạo lại sau đó thay đổi kiểu thành kiểu thực tế như string/int64.
Hiển thị trình duyệt của JSON quá lớn và số lượng struct lớn tiêu tốn bộ nhớ đáng kể. Khuyến nghị: ① Chỉ giữ các trường khóa trong JSON mẫu; ② Chia thành nhiều đối tượng và chuyển đổi riêng biệt; ③ Đóng các tab khác tiêu tốn nhiều bộ nhớ trong trình duyệt.
Khi mảng trống [] hoặc các kiểu phần tử không nhất quán, công cụ sử dụng interface{} làm dự phòng. Bạn có thể thêm các phần tử mẫu cùng kiểu, hoặc thủ công thay đổi kiểu thành các kiểu slice cụ thể như []string, []int64 sau khi tạo.
Công cụ này tự động suy luận các kiểu Go tương ứng dựa trên kiểu giá trị JSON; các ánh xạ phổ biến như sau:
| Ví dụ giá trị JSON | Kiểu Go được tạo | Ghi chú |
|---|---|---|
"hello" | string | Ánh xạ chuỗi trực tiếp |
true / false | bool | Giá trị boolean |
42 | int64 | Số không có dấu thập phân |
3.14 | float64 | Số có dấu thập phân |
null | interface{} | Dự phòng an toàn khi không thể suy luận kiểu cụ thể |
["a","b"] | []string | Mảng chuỗi |
[1,2,3] | []int64 | Mảng số nguyên |
[{...},{...}] | []UserItem | Mảng đối tượng, các kiểu phần tử được tạo đệ quy |
{"id":1} | User | Đối tượng tạo struct độc lập |
Công cụ sử dụng int64 và float64 theo mặc định; điều chỉnh theo nhu cầu trong các dự án thực tế:
| Kịch bản | Kiểu được khuyến nghị | Lý do |
|---|---|---|
| ID số nguyên thông thường, bộ đếm | int64 | Phù hợp với mặc định công cụ, tương thích với hầu hết các số JSON |
| Khóa chính tự động tăng cơ sở dữ liệu được biết là dương | uint64 | Tránh số âm, ngữ nghĩa rõ ràng hơn |
| Hệ thống 32 bit hoặc số nguyên phạm vi nhỏ rõ ràng | int32 | Giảm mức sử dụng bộ nhớ |
| Giá cả, tọa độ, tính toán khoa học | float64 | Phù hợp với mặc định công cụ, độ chính xác dấu phẩy động tiêu chuẩn |
| Tính toán tiền tệ chính xác | decimal.Decimal / int | float64 có rủi ro độ chính xác; khuyên dùng shopspring/decimal hoặc int theo đơn vị xu |
Tất cả xử lý của công cụ JSON sang Go này hoàn thành hoàn toàn cục bộ trong trình duyệt của bạn: phân tích JSON, suy luận kiểu, tạo mã Go đều thực thi phía khách thông qua Web Worker; nội dung JSON đầu vào, tệp tải lên và mã Go được tạo không bao giờ tải lên bất kỳ máy chủ nào, cũng không được ghi lại, lưu vào bộ đệm hay lưu trữ vào đám mây. Sau khi đóng hoặc làm mới trang, tất cả nội dung đầu vào và đầu ra tự động bị xóa khỏi bộ nhớ, chỉ localStorage giữ lại lịch sử đầu vào gần đây của bạn (có thể xóa bất cứ lúc nào). Thích hợp để xử lý JSON chứa khóa API, token, dữ liệu kinh doanh nhạy cảm.