Maison  >  Article  >  développement back-end  >  caractères d'échappement golang json

caractères d'échappement golang json

PHPz
PHPzoriginal
2023-05-15 11:05:071139parcourir

Dans Golang, json est un format d'échange de données couramment utilisé, qui peut facilement sérialiser des données structurées au format json, et peut également désérialiser au type de données d'origine à partir des données au format json. Lors du processus d'utilisation de json, vous devez parfois échapper certains caractères spéciaux pour éviter les erreurs dans la chaîne json. Alors, comment échapper aux caractères json dans Golang ? Cet article vous le présentera en détail.

json in golang

In golang, vous pouvez utiliser le package encoding/json pour traiter les données json. Ce package fournit les fonctions Marshal et Unmarshal, qui peuvent convertir n'importe quel type de données en golang en une chaîne au format json et reconvertir une chaîne au format json en type de données d'origine dans golang. Voici un exemple simple :

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    p := Person{
        Name: "Tom",
        Age:  20,
    }
    data, _ := json.Marshal(p)
    fmt.Println(string(data))

    var newPerson Person
    json.Unmarshal(data, &newPerson)
    fmt.Println(newPerson)
}

Le résultat de sortie est :

{"name":"Tom","age":20}
{Tom 20}

Vous pouvez le voir en sérialisant l'instance de structure Person dans une chaîne au format json, puis en désérialisant et la restauration dans une nouvelle instance Person réalise le processus de conversion du type de données golang au format json, puis de reconversion au type de données golang dans la direction opposée.

Caractères d'échappement dans la chaîne json

Dans la chaîne json, certains caractères doivent être échappés, sinon cela provoquera des erreurs de syntaxe. Les caractères d'échappement courants incluent :

#🎜🎜 ##🎜 🎜 ## 🎜🎜 ## 🎜🎜 # "# 🎜🎜 ## 🎜🎜 # Double Quotes # 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 # # barre arrière # 🎜🎜 #/barre obliquebfChangement de pagen#🎜 🎜##🎜 🎜# Saut de lignerEnter tSi vous n'utilisez pas de caractères d'échappement dans la chaîne json, mais remplacez directement le double Lorsque les caractères spéciaux tels que les guillemets sont écrits dans la chaîne, l'erreur suivante se produira : Dans la chaîne json ci-dessus, le guillemet double n'utilise pas de caractère d'échappement après le dernier mot "programmeur". L'encodeur json ne peut pas reconnaître correctement cette chaîne. Cette erreur peut être traitée comme suit :
{"name":"Tom","introduction":"I'm a "programmer""}
Dans la chaîne ci-dessus, le programmeur a utilisé des guillemets doubles ("") pour échapper le dernier mot. Des guillemets doubles pour éviter l'encodeur json. erreurs. Traitement des caractères d'échappement json Dans Golang, vous pouvez utiliser json.Marshal pour le traitement des caractères d'échappement json. Cette fonction échappera à tous les caractères requis, y compris les caractères d'échappement de base et les points de code Unicode. Par exemple, si vous devez convertir la structure suivante : dans la chaîne au format json suivante : , vous pouvez utiliser le Code suivant :
p := Person{
    Name:   "Tom",
    Gender: `He said, "I'm the best!"`,
}
data, _ := json.Marshal(p)
fmt.Println(string(data))
Le résultat de sortie est :
Caractère d'évasion Signification
# 🎜🎜#Backspace# 🎜🎜#
# 🎜🎜#Caractère de tabulation horizontale
{"name": "Tom", "introduction": "I'm a "programmer""}
type Person struct {
    Name   string `json:"name"`
    Gender string `json:"gender"`
}
{"name":"Tom","gender":"He said, "I'm the best!""}
{"name":"Tom","gender":"He said, "I'm the best!""}

Vous pouvez voir que lorsque vous utilisez la fonction json.Marshal pour sérialiser l'instance p dans une chaîne au format json, doublez les guillemets sont automatiquement ajoutés en tant que ", évitant ainsi les erreurs de l'encodeur json.

En plus des caractères d'échappement courants, la fonction json.Marshal fournie par golang peut également gérer les caractères de contrôle et les caractères multi-octets. Nous vous peut traiter les caractères qui doivent être échappés avant de sérialiser les données de structure dans une chaîne au format json :

p := Person{
    Name:   "Tom",
    Gender: `He said, "I'm the best!"`,
}

// 处理多字节字符
p.Gender = strings.Replace(p.Gender, "!", "\uff01", -1)

// 处理控制字符
p.Gender = strings.Replace(p.Gender, "", "\u0001", -1)

data, _ := json.Marshal(p)
fmt.Println(string(data))

Dans le code ci-dessus, utilisez d'abord des chaînes. Remplacez dans la fonction de bibliothèque standard de Golang, remplacez le multi- caractères d'octets dans la chaîne avec les points de code UTF-8 correspondants, puis utilisez la même méthode pour remplacer les caractères de contrôle dans la chaîne. Enfin, utilisez json.Marshal pour sérialiser l'instance p au format json. :

{"name":"Tom","gender":"He said, "I'm the best!\uff01""}

Vous pouvez voir que dans la chaîne json, nous avons échappé les caractères qui doivent être échappés dans les caractères d'échappement correspondants, afin de les éviter Erreur de l'encodeur json

.

Résumé

Dans Golang, vous pouvez utiliser la fonction json.Marshal pour convertir facilement les données de structure en une chaîne au format json et échapper automatiquement les caractères qui doivent être échappés. Cela peut éviter des erreurs dans. la chaîne json et garantir l'exactitude des données json, d'autres méthodes doivent être utilisées pour traiter les caractères multi-octets et les caractères de contrôle

.

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
Article précédent:Comment écrire du code GolangArticle suivant:Comment écrire du code Golang