Why does JSON Unmarshaling of Embedded Structs Lead to Unexpected Behavior?

Linda Hamilton
Release: 2024-11-07 03:12:02
Original
694 people have browsed it

Why does JSON Unmarshaling of Embedded Structs Lead to Unexpected Behavior?

JSON Unmarshal embedded struct Exploration

When attempting to unmarshal a JSON object into a struct with an embedded field, unexpected behavior can arise. To illustrate this, consider the following struct definitions:

<code class="go">type Outer struct {
    Inner
    Num int
}

type Inner struct {
    Data string
}

func (i *Inner) UnmarshalJSON(data []byte) error {
    i.Data = string(data)
    return nil
}</code>
Copy after login

Unmarshalling a JSON object into an instance of Outer using json.Unmarshal(data, &Outer{}) results in only the Inner field being populated, while the Num field remains untouched. This can be attributed to the way JSON unmarshals embedded fields.

To resolve this issue, it is recommended to make the embedded field an explicit field in the parent struct. This modification allows the JSON unmarshaler to directly access and unmarshal the field. Here's the corrected struct definition:

<code class="go">Outer struct {
    I Inner // make Inner an explicit field
    Num int `json:"Num"`
}</code>
Copy after login

In this updated version, the Inner field is made an explicit field named I. Additionally, the Num field is tagged with json:"Num" to ensure that the JSON key "Num" maps to this field during unmarshalling.

By adopting this approach, both the I and Num fields will be correctly populated when unmarshalling a JSON object into an instance of Outer.

The above is the detailed content of Why does JSON Unmarshaling of Embedded Structs Lead to Unexpected Behavior?. 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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!