Home  >  Article  >  Backend Development  >  How to Unmarshal JSON Data into a Custom Struct with Specialized Substructures in Go?

How to Unmarshal JSON Data into a Custom Struct with Specialized Substructures in Go?

Linda Hamilton
Linda HamiltonOriginal
2024-11-06 14:27:02882browse

How to Unmarshal JSON Data into a Custom Struct with Specialized Substructures in Go?

Unmarshal JSON Data into a Custom Struct

In Go, unmarshaling JSON data into a struct is a common task. Consider the following JSON data:

<code class="json">{
    "Asks": [[21, 1], [22, 1]],
    "Bids": [[20, 1], [19, 1]]
}</code>

We can define a struct to represent this data:

<code class="go">type Message struct {
    Asks [][]float64 `json:"Asks"`
    Bids [][]float64 `json:"Bids"`
}</code>

However, what if we want to further specialize the data structure, representing each order as an individual struct:

<code class="go">type Message struct {
    Asks []Order `json:"Asks"`
    Bids []Order `json:"Bids"`
}

type Order struct {
    Price float64
    Volume float64
}</code>

Custom Unmarshaling with MarshalJSON

To achieve this, we can implement the json.Unmarshaler interface on our Order struct:

<code class="go">type Order struct {
    Price float64
    Volume float64
}

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 method instructs Go to decode each element in the JSON as a 2-element array and assigns the values to the Price and Volume fields of the Order struct.

After implementing this method, we can now unmarshal the JSON data into our custom struct:

<code class="go">jsonBlob := []byte(`{"Asks": [[21, 1], [22, 1]], "Bids": [[20, 1], [19, 1]]}`)
message := &Message{}
if err := json.Unmarshal(jsonBlob, message); err != nil {
    panic(err)
}</code>

Now, we can access the data using the custom Order struct:

<code class="go">fmt.Println(message.Asks[0].Price)</code>

The above is the detailed content of How to Unmarshal JSON Data into a Custom Struct with Specialized Substructures in Go?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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