Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membuat pengekod JSON tersuai di Golang?

Bagaimana untuk membuat pengekod JSON tersuai di Golang?

WBOY
WBOYasal
2024-06-03 11:18:56515semak imbas

Untuk membuat pengekod JSON tersuai di Golang: laksanakan antara muka pengekodan/json.Marshaler atau pengekodan/json.Unmarshaler. Antara muka Marshaler menyediakan kaedah untuk menukar struktur kepada bait JSON. Antara muka Unmarshaler menyediakan kaedah untuk menyahkod struktur daripada bait JSON.

如何在 Golang 中创建自定义 JSON 编码器?

Buat Pengekod JSON Tersuai di Golang

JSON ialah format popular untuk menghantar data melalui web. Di Golang, struktur boleh dikodkan dan dinyahkod dengan mudah menggunakan perpustakaan standard pengekodan/json. Walau bagaimanapun, kadangkala anda mungkin perlu mencipta pengekod tersuai untuk memenuhi keperluan khusus. encoding/json 轻松地对结构进行编解码。然而,有时你可能需要创建自定义的编码器来满足特定的需求。

实现自定义 JSON 编码器

为了实现一个自定义 JSON 编码器,需要实现 encoding/json.Marshalerencoding/json.Unmarshaler 接口。

  • Marshaler 接口定义了一个 MarshalJSON 方法,该方法将结构转换为 JSON 字节。
  • Unmarshaler 接口定义了一个 UnmarshalJSON 方法,该方法从 JSON 字节中解码一个结构。

以下是如何实现一个自定义的 JSON 编码器:

type User struct {
    ID   int
    Name string
}

// 实现 Marshaler 接口
func (u User) MarshalJSON() ([]byte, error) {
    return []byte(`{"user_id": ` + strconv.Itoa(u.ID) + `,"name": "` + u.Name + `"}`), nil
}

// 实现 Unmarshaler 接口
func (u *User) UnmarshalJSON(data []byte) error {
    var v map[string]interface{}
    if err := json.Unmarshal(data, &v); err != nil {
        return err
    }
    id, ok := v["user_id"].(float64)
    if !ok {
        return fmt.Errorf("invalid user_id")
    }
    u.ID = int(id)
    u.Name = v["name"].(string)
    return nil
}

该编码器将 User 结构编解码为具有特定格式的 JSON 字段。user_id 编码为整数,而 name 编码为字符串。

实战案例

在以下示例中,我们使用自定义编码器将 User

Melaksanakan pengekod JSON tersuai

Untuk melaksanakan pengekod JSON tersuai, anda perlu melaksanakan pengekodan/json.Marshaler atau pengekodan/json.Unmarshaler antara muka. 🎜
  • Antara muka Marshaler mentakrifkan kaedah MarshalJSON yang menukar struktur kepada bait JSON.
  • Antara muka Unmarshaler mentakrifkan kaedah UnmarshalJSON yang menyahkod struktur daripada bait JSON.
🎜Begini caranya untuk melaksanakan pengekod JSON tersuai: 🎜
// 创建一个 User 结构
u := User{
    ID:   1,
    Name: "John Doe",
}

// 转换为 JSON 并打印
jsonBytes, err := json.Marshal(u)
if err != nil {
    panic(err)
}
fmt.Println(string(jsonBytes))
🎜Pengekod ini mengekod dan menyahkod struktur Pengguna ke dalam medan JSON dengan format tertentu. user_id dikodkan sebagai integer dan name dikodkan sebagai rentetan. 🎜🎜🎜Kes praktikal🎜🎜🎜Dalam contoh berikut, kami menggunakan pengekod tersuai untuk menukar struktur Pengguna kepada bait JSON: 🎜
{"user_id": 1,"name": "John Doe"}
🎜Output: 🎜rrreee🎜Dengan mencipta Penukar pengekodan JSON tersuai anda boleh mengawal format dan kandungan data JSON mengikut keperluan anda. 🎜

Atas ialah kandungan terperinci Bagaimana untuk membuat pengekod JSON tersuai di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn