Home > Backend Development > Golang > 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
Release: 2024-11-06 14:27:02
Original
950 people have browsed it

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

We can define a struct to represent this data:

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

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

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

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

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

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

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!

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