How to Serialize and Deserialize Mixed-Type JSON Arrays in Go?
Dec 10, 2024 pm 01:38 PMSerialize a Mixed Type JSON Array in Go
In Go, serializing a mixed type JSON array, containing strings, floats, and Unicode characters, can pose a challenge. While Python allows for arrays of mixed types, Go lacks this feature.
Serialization with MarshalJSON
To customize serialization, Go offers the json.Marshaler interface. By implementing this interface, we can specify how our struct, Row, should be encoded. In this case, we want to encode it as an array of heterogeneous values.
type Row struct { Ooid string Score float64 Text string } func (r *Row) MarshalJSON() ([]byte, error) { arr := []interface{}{r.Ooid, r.Score, r.Text} return json.Marshal(arr) }
MarshalJSON takes an intermediate slice of interface{} to encode the mixed values and returns the encoded JSON bytes.
Deserialization with UnmarshalJSON
To deserialize from JSON bytes back to structs, Go provides the json.Unmarshaler interface.
func (r *Row) UnmarshalJSON(bs []byte) error { arr := []interface{}{} json.Unmarshal(bs, &arr) // TODO: add error handling here. r.Ooid = arr[0].(string) r.Score = arr[1].(float64) r.Text = arr[2].(string) return nil }
UnmarshalJSON uses a similar intermediate slice of interface{} to decode the JSON values and populate the Row struct.
By implementing these interfaces, we gain control over the serialization and deserialization process, allowing us to work with mixed type arrays in Go.
The above is the detailed content of How to Serialize and Deserialize Mixed-Type JSON Arrays in Go?. For more information, please follow other related articles on the PHP Chinese website!

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Go language pack import: What is the difference between underscore and without underscore?

How to implement short-term information transfer between pages in the Beego framework?

How to convert MySQL query result List into a custom structure slice in Go language?

How do I write mock objects and stubs for testing in Go?

How can I define custom type constraints for generics in Go?

How can I use tracing tools to understand the execution flow of my Go applications?

How to write files in Go language conveniently?
