php editor Strawberry introduces you to converting values during grouping. In programming, converting values when marshalling refers to the operation of converting between different data types. By converting values, we can convert a value of one data type to another data type to meet specific needs. For example, convert a string to an integer, or an integer to a string, etc. Converting values is one of the very common and important operations in programming. Mastering the use of converted values can improve the flexibility and readability of the code, while also avoiding some potential errors and problems. In the following articles, we will introduce in detail the conversion methods and considerations between different data types to help you better understand and apply conversion values when marshalling.
Given the code below, is it possible to convert names when unmarshalling? Let's say I want it to always be lowercase regardless of whether it's in the actual json or not.
type Person struct { FirstName string `json:"first_name"` LastName string `json:"last_name"` } func main() { jsonText := GetJsonFromSomewhere() var v Person json.Unmarshal(jsonText, &v) }
One way to achieve this is to create a custom type that implements the unmarshaler## from the
encoding/json package # interface.
This is the link to this interface. Any type that implements unmarshaler can be used as the type of a structure field when doing json unmarshalling. When unmarshalling,
encoding/json will use the implementation of the interface's
unmarshaljson function to convert the json bytes to the field type.
unmarshaljson function that, among other things, changes the string value to lowercase.
type lowercasestring string func (l *lowercasestring) unmarshaljson(bytes []byte) error { lowercasedstring := strings.tolower(string(bytes)) *l = lowercasestring(lowercasedstring) return nil }
string:
type person struct { firstname lowercasestring `json:"first_name"` lastname lowercasestring `json:"last_name"` }
string to use them as
string s).
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"
This is the above code running in the go playground.
The above is the detailed content of Convert values when marshalling. For more information, please follow other related articles on the PHP Chinese website!