Home > Backend Development > Golang > How to Serialize and Deserialize Mixed-Type JSON Arrays in Go?

How to Serialize and Deserialize Mixed-Type JSON Arrays in Go?

Barbara Streisand
Release: 2024-12-10 13:38:10
Original
900 people have browsed it

How to Serialize and Deserialize Mixed-Type JSON Arrays in Go?

Serialize 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)
}
Copy after login

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
}
Copy after login

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template