Home > Article > Backend Development > How to Customize Unmarshaling of JSON Data into Specific Structs in Go?
In Go, unmarshaling JSON data into predefined structs is a common task. However, this process can become more complex when you need to further customize the unmarshaled data structure. This article explores an approach to tailor the unmarshaling process to specific requirements.
Let's consider the following JSON data:
<code class="json">b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`)</code>
Your initial approach involved defining a struct Message with two fields, Asks and Bids, each holding an array of floats. However, you seek a more specialized structure where these arrays contain structs of type Order instead of simple floats. The desired data structure looks like:
<code class="go">type Message struct { Asks []Order `json:"Bids"` Bids []Order `json:"Asks"` } type Order struct { Price float64 Volume float64 }</code>
To achieve this customization, we can leverage Go's json.Unmarshaler interface. By implementing this interface on the Order struct, we provide a custom unmarshaling logic that converts the JSON array elements into Order structs.
<code class="go">func (o *Order) UnmarshalJSON(data []byte) error { var v [2]float64 if err := json.Unmarshal(data, &v); err != nil { return err } o.Price = v[0] o.Volume = v[1] return nil }</code>
This implementation specifies that the Order type should be decoded from a 2-element array of floats, where the first element represents the price and the second element represents the volume.
Using this custom unmarshaling logic, you can now effectively unmarshal the JSON data into the desired struct Message.
<code class="go">m := new(Message) err := json.Unmarshal(b, &m) fmt.Println(m.Asks[0].Price)</code>
With the custom UnmarshalJSON implementation, this code will print the price of the first ask order. This customized unmarshaling approach provides a flexible way to tailor data unmarshaling to specific requirements in Go.
The above is the detailed content of How to Customize Unmarshaling of JSON Data into Specific Structs in Go?. For more information, please follow other related articles on the PHP Chinese website!