duanjiong1952 2017-11-04 18:56
浏览 27

bb.person被填充而a.Person没有被填充是有原因的吗?

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    First string `json:"name"`
}

type person struct {
    Last string `json:"name"`
}

type A struct {
    *Person `json:"person"`
}

func (a *A) UnmarshalJSON(b []byte) error {
    type alias A

    bb := struct {
        *person `json:"person"`
        *alias      
    }{
        alias: (*alias)(a),
    }

    if err := json.Unmarshal(b, &bb); err != nil {
        return err
    }

    fmt.Printf("%+v
", bb.person)

    return nil
}

func main() {
    b := []byte(`{"person": {"name": "bob"}}`)
    a := &A{}

    if err := json.Unmarshal(b, a); err != nil {
        fmt.Println(err)
    }

    fmt.Printf("%+v
", a.Person)
}

results in:

&{Last:bob}
<nil>

Why does bb.person and a.Person have the same struct tag but only bb.person gets filled in? I haven't been able to find the appropriate documentation but why does this happen and is it guaranteed to always happen?

https://play.golang.org/p/Fvo_hg3U6r

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 msix packaging tool打包问题
    • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
    • ¥15 python的qt5界面
    • ¥15 无线电能传输系统MATLAB仿真问题
    • ¥50 如何用脚本实现输入法的热键设置
    • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
    • ¥30 深度学习,前后端连接
    • ¥15 孟德尔随机化结果不一致
    • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
    • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线