/ / Hướng dẫn sử dụng JSON trong Go

Hướng dẫn sử dụng JSON trong Go

JSON (JavaScript Object Notation) là một định dạng dữ liệu rất linh hoạt và rất phổ biến. Nó thường được sử dụng để giao tiếp giữa các ứng dụng web và cũng là một cách thuận tiện để lưu trữ một lượng lớn dữ liệu ứng dụng có cấu trúc.


JSON hữu ích đến mức hầu như tất cả các ngôn ngữ lập trình hiện đại đều cung cấp hỗ trợ tích hợp để làm việc với nó, bao gồm cả Go.


Làm việc với JSON khi di chuyển

Bạn có thể chia hầu hết công việc bạn sẽ làm với JSON thành hai danh mục chung: sắp xếp và bỏ quản lý. Wikipedia định nghĩa soái ca là:

Trong khoa học máy tính, marshaling là quá trình chuyển đổi biểu diễn bộ nhớ của một đối tượng thành một định dạng dữ liệu phù hợp để lưu trữ hoặc truyền tải. Nó thường được sử dụng khi dữ liệu phải được di chuyển giữa các phần khác nhau của chương trình máy tính hoặc từ chương trình này sang chương trình khác.

Nói một cách đơn giản hơn, marshaling là quá trình chuyển đổi dữ liệu được lưu trữ trong một biến thành một dạng để chuyển sang chương trình khác dễ dàng hơn. Unmarshaling là quá trình ngược lại: nó liên quan đến việc lấy dữ liệu được định dạng để vận chuyển và chuyển đổi nó sang dạng dễ sử dụng hơn cho chương trình của bạn.

Sử dụng Go, bạn có thể điều chỉnh cấu trúc dữ liệu gốc thành JSON. Và bạn có thể thực hiện hành động ngược lại, giải nén dữ liệu JSON thành các biến Go.

So sánh với JSON trong Go

Go cung cấp gói mã hóa / json để giúp bạn dễ dàng làm việc với JSON. Gói này chứa một số chức năng, nhưng chức năng bạn sẽ sử dụng để điều phối là Soái ca hàm số. Soái ca có chữ ký chức năng sau:

func Marshal(v interface{}) ([]byte, error)

Điều này có nghĩa rằng Soái ca chấp nhận một tham số của bất kỳ kiểu dữ liệu nào và trả về hai giá trị: một lát byte và một lỗi. Nói cách khác, bạn gọi Soái ca với một giá trị Go và nó chuyển đổi nó thành JSON và trả về JSON tương đương. Nếu nó gặp lỗi trong quá trình chuyển đổi, nó sẽ trả về lỗi và một lát trống.

Đây là một ví dụ mã sử dụng Soái ca để chuyển đổi một bản đồ thành JSON. Để chạy ví dụ này, tất cả những gì bạn cần là tạo tệp cờ vây trong trình soạn thảo mã yêu thích của bạn hoặc sử dụng sân chơi cờ vây:

package main

import (
"encoding/json"
"fmt"
)

func main() {
val := map[string]int{
"john": 25,
"mary": 19,
"adam": 5,
}

res, _ := json.Marshal(val)
fmt.Println(string(res))
}

Nếu bạn chạy mã đó, nó sẽ xuất ra như sau:

Như đã đề cập trước đây, bạn có thể điều chỉnh bất kỳ loại dữ liệu Go nào sang JSON, mặc dù trong cuộc sống thực, bạn thường sẽ sắp xếp các cấu trúc. Do đó, Go cung cấp một tính năng được gọi là thẻ cấu trúc để cho phép bạn cung cấp Soái ca hướng dẫn bổ sung để chuyển đổi cấu trúc của bạn.

Thẻ struct là một chuỗi bạn đưa vào khai báo struct bên cạnh kiểu dữ liệu của một trường. Thẻ cấu trúc cho phép bạn điều chỉnh cách Soái ca xử lý trường mà thẻ thuộc về. Bạn có thể sử dụng thẻ struct để đổi tên một trường trong đầu ra JSON hoặc thậm chí bỏ qua hoàn toàn. Cấu trúc thẻ (đó Soái ca nhận ra) bắt đầu bằng chuỗi con “json:”.

Ví dụ: Giả sử bạn có một cấu trúc Xe hơi đại diện cho một số thông tin về một chiếc xe hơi. Đây là mã để tạo Xe hơi và điều chỉnh nó thành JSON:

package main

import (
"encoding/json"
"fmt"
)

func main() {
type Car struct {
Brand string
Model string
Price int
}
val := Car{Brand: "Mercedes", Model: "Benz", Price: 50000}
res, _ := json.Marshal(val)
fmt.Println(string(res))
}

Mã này tạo ra đầu ra:

Các Nhãn hiệu, Người mẫuGiá bán Lĩnh vực Xe hơi cần bắt đầu bằng chữ hoa, hoặc Soái ca sẽ không thể chuyển đổi chúng. Điều này dẫn đến các trường đầu ra JSON cũng bắt đầu bằng chữ hoa. Nhưng nếu bạn muốn tên bắt đầu bằng chữ thường trong JSON hoặc nếu bạn muốn đổi tên hoàn toàn một trường? Đó là nơi xuất hiện của các thẻ struct. Đây là một ví dụ:

package main
import (
"encoding/json"
"fmt"
)
func main() {
type Car struct {
ID int `json:"-"`
Brand string `json:"type"`
Model string `json:"model"`
Price int `json:"price"`
}
val := Car{ID: 0, Brand: "Mercedes", Model: "Benz", Price: 50000}
res, _ := json.Marshal(val)
fmt.Println(string(res))
}

Mã này giới thiệu một trường ID mới Soái ca bỏ qua đầu ra JSON thông qua thẻ struct. Mã cũng sử dụng thẻ struct để đổi tên các trường struct khác. Đây là đầu ra của chương trình:

Như bạn có thể thấy, một phần của thẻ struct sau “json:” trở thành tên của trường trong đầu ra của Marshal. Có một ngoại lệ: nếu đó là chuỗi “-“, Marshal sẽ bỏ qua trường đó khỏi đầu ra. Bạn có thể đọc thêm về thẻ Marshal và thẻ struct trong tài liệu Go.

Unmarshaling From JSON in Go

Gói mã hóa / json cũng cung cấp một chức năng không phân chia, được gọi là Không gây chết người. Nó có chữ ký chức năng sau:

func Unmarshal(data []byte, v interface{}) error

không giống Soái ca, Không gây chết người không trả về giá trị. Thay vào đó, nó chấp nhận JSON dưới dạng một lát byte trong đối số đầu tiên và sau đó lưu trữ dữ liệu đã chuyển đổi trong đối tượng được trỏ đến bởi đối số thứ hai. Không gây chết người cũng hoạt động với thẻ struct, nhưng ở đây, các thẻ cho biết Không gây chết người trường JSON nào khớp với trường cấu trúc nào.

Khi giải nén trong một chương trình, bạn có thể tìm nạp dữ liệu từ một API, nhưng ở đây bạn sẽ sử dụng dữ liệu giả. Đây là cách bạn sử dụng Không gây chết người:

package main

import (
"encoding/json"
"fmt"
)

func main() {
type Car struct {
ID int `json:"-"`
Brand string `json:"type"`
Model string `json:"model"`
Price int `json:"price"`
}

jsonInput := `{
"type": "Toyota",
"model": "Camry",
"price": 2000
}`

var jsonOutput Car
err := json.Unmarshal([]byte(jsonInput), &jsonOutput)

if err != nil {
fmt.Println("JSON decode error!")
return
}

fmt.Println(jsonOutput)
}

Mã này sử dụng cùng loại Xe như ví dụ trước và nó giải nén một đối tượng JSON thành một cấu trúc có kiểu Xe, sau đó in dữ liệu trong cấu trúc. Khi chạy, chương trình tạo ra kết quả này:

Điều này cho thấy rằng dữ liệu JSON giả đã được giải nén thành công vào jsonOutput cấu trúc.

Giúp làm việc dễ dàng với JSON

Với gói mã hóa / json, làm việc với JSON trong Go đơn giản như hai lệnh gọi hàm: Marshal và Unmarshal. Go cũng cho phép bạn tùy chỉnh quá trình sắp xếp / bỏ quản lý JSON bằng các thẻ struct.

Chuyển đổi dữ liệu sang JSON là một cách tuyệt vời để chia sẻ dữ liệu đó với một chương trình hoặc quy trình khác. Định dạng này rất phổ biến nên JSON có thể di động được.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *