Maison  >  Article  >  développement back-end  >  Convertir les valeurs lors du marshalling

Convertir les valeurs lors du marshalling

PHPz
PHPzavant
2024-02-09 17:36:311229parcourir

Convertir les valeurs lors du marshalling

l'éditeur php Strawberry vous présente la conversion des valeurs lors du regroupement. En programmation, la conversion de valeurs lors du marshalling fait référence à l'opération de conversion entre différents types de données. En convertissant des valeurs, nous pouvons convertir une valeur d'un type de données en un autre type de données pour répondre à des besoins spécifiques. Par exemple, convertissez une chaîne en entier, ou un entier en chaîne, etc. La conversion des valeurs est l'une des opérations les plus courantes et les plus importantes en programmation. Maîtriser l'utilisation des valeurs converties peut améliorer la flexibilité et la lisibilité du code, tout en évitant certaines erreurs et problèmes potentiels. Dans les articles suivants, nous présenterons en détail les méthodes de conversion et les considérations entre les différents types de données pour vous aider à mieux comprendre et appliquer les valeurs de conversion lors du marshalling.

Contenu de la question

Étant donné le code ci-dessous, est-il possible de convertir les noms lors du démarchage ? Disons que je veux qu'il soit toujours en minuscules, que ce soit dans le json ou non.

type Person struct {
    FirstName string `json:"first_name"`
    LastName  string `json:"last_name"`
}

func main() {
    jsonText := GetJsonFromSomewhere()
    var v Person
    json.Unmarshal(jsonText, &v)
}

Solution de contournement

Une façon d'y parvenir est de créer un type personnalisé qui implémente une fonction encoding/json 包中的 unmarshaler 接口。 这是此界面的链接。任何实现 unmarshaler 的类型都可以在进行 json 解组时用作结构体字段的类型。在进行解组时,encoding/json 将使用接口的 unmarshaljson qui convertit les octets json en un type de champ.

Vous pouvez donc écrire une fonction unmarshaljson qui, entre autres choses, change une valeur de chaîne en minuscules.

Voici un exemple :

type lowercasestring string

func (l *lowercasestring) unmarshaljson(bytes []byte) error {
    lowercasedstring := strings.tolower(string(bytes))

    *l = lowercasestring(lowercasedstring)

    return nil
}

Ensuite, dans la structure de la carte json, vous pouvez utiliser un type personnalisé à la place string :

type person struct {
    firstname lowercasestring `json:"first_name"`
    lastname  lowercasestring `json:"last_name"`
}

Si vous désorganisez cette structure, les valeurs du prénom et du nom seront en minuscules (notez également que vous devez les transtyper en string 以将它们用作 string pour les utiliser comme

).

testJSON := `{"first_name" : "TestFirstNAME", "last_name": "TestLastNAME"}`
var result Person

err := json.Unmarshal([]byte(testJSON), &result)
if err != nil { /*handle the error*/ }

fmt.Println(result.FirstName) // prints "testfirstname"

var stringLastName string
stringLastName = string(result.LastName) // need to type convert from LowerCaseString to string

fmt.Println(stringLastName) // prints "testlastname"
Il s'agit du code ci-dessus exécuté dans Go Playground.

🎜

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer