Maison >développement back-end >Golang >Comment créer un encodeur JSON personnalisé dans Golang ?

Comment créer un encodeur JSON personnalisé dans Golang ?

WBOY
WBOYoriginal
2024-06-03 11:18:56549parcourir

Pour créer un encodeur JSON personnalisé dans Golang : implémentez l'interface encoding/json.Marshaler ou encoding/json.Unmarshaler. L'interface Marshaler fournit une méthode pour convertir une structure en octets JSON. L'interface Unmarshaler fournit une méthode pour décoder une structure à partir d'octets JSON.

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

Créer un encodeur JSON personnalisé dans Golang

JSON est un format populaire pour transmettre des données sur le Web. Dans Golang, les structures peuvent être facilement codées et décodées à l'aide de la bibliothèque standard encoding/json. Cependant, vous devrez parfois créer un encodeur personnalisé pour répondre à des besoins spécifiques. 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

Implémentation d'un encodeur JSON personnalisé

Afin d'implémenter un encodeur JSON personnalisé, vous devez implémenter le encoding/json.Marshaler ou le encoding/json.Unmarshaler interface. 🎜
  • L'interface Marshaler définit une méthode MarshalJSON qui convertit une structure en octets JSON.
  • L'interface Unmarshaler définit une méthode UnmarshalJSON qui décode une structure à partir d'octets JSON.
🎜Voici comment implémenter un encodeur JSON personnalisé : 🎜
// 创建一个 User 结构
u := User{
    ID:   1,
    Name: "John Doe",
}

// 转换为 JSON 并打印
jsonBytes, err := json.Marshal(u)
if err != nil {
    panic(err)
}
fmt.Println(string(jsonBytes))
🎜Cet encodeur encode et décode la structure Utilisateur en champs JSON avec un format spécifique. user_id est codé sous forme d'entier et name est codé sous forme de chaîne. 🎜🎜🎜Cas pratique🎜🎜🎜Dans l'exemple suivant, nous utilisons un encodeur personnalisé pour convertir la structure Utilisateur en octets JSON : 🎜
{"user_id": 1,"name": "John Doe"}
🎜Sortie : 🎜rrreee🎜En créant un convertisseur d'encodage JSON personnalisé, vous pouvez contrôler le format et le contenu des données JSON en fonction de vos besoins. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn