json Unmarshal 将属性替换为零(如果它是在标签中构建的)

这是解组目标的结构:


type ParsedObjectType struct{

    Value struct{

        E []struct {

            B bool

            C float32 `json:"coefficient"`

            CE float32

            G int `json:"group"`

            P float32 `json:"period"`

            T int `json:"type"`

        }

    }

}

soucre 字符串看起来像这样:


{"B":false,"C":2.123,"CE":0,"G":1,"P":1000,"T":0}

json.Unmarshal([]byte(string), ParsedObjectType)我收到后


{

    "B": false,

    "coefficient": 0,

    "CE": 0,

    "group": 0,

    "period": 0,

    "type": 0

}

在属性中使用零而不是源数据


撒科打诨
浏览 168回答 3
3回答

炎炎设计

    你有两个大问题:您的标签完全错误。例如,您的输入包含"C":2.123,但您的结构标签意味着 Unmarshaler 正在寻找"coefficient":2.123,它永远找不到。要更正此问题,请设置标签以匹配您的输入:type ParsedObjectType struct{    Value struct{        E []struct {            B  bool            C  float32 `json:"C"`            CE float32            G  int     `json:"G"`            P  float32 `json:"P"`            T  int     `json:"T"`        }    }}请注意,现在您的结构字段与您的 JSON 键完全匹配,因此如果您愿意,您可以简单地完全消除您的 JSON 标签以简单起见:type ParsedObjectType struct{    Value struct{        E []struct {            B  bool            C  float32            CE float32            G  int            P  float32            T  int        }    }}您的数据结构似乎与您的输入不匹配。您的输入似乎是单个对象,但您的输入需要一个对象中的一个对象。要更正此问题(假设您在问题中提供的输入是完整的),请删除数据结构中的额外层:type ParsedObjectType struct{    B  bool    C  float32    CE float32    G  int    P  float32    T  int}

精慕HU

据我所知,json你有紧凑的名字,但它不应该强迫你在结构中创建神秘的名字。在代码中,您应该使用有意义的名称,但在序列化格式中您可以使用同义词。改编自您的示例:游乐场:https://play.golang.org/p/gbWhV3FfHMrpackage mainimport (    "encoding/json"    "log")type ParsedObjectType struct {    Value struct {        Items []struct {            Coefficient float32 `json:"C"`            Group       int     `json:"G"`            Period      float32 `json:"P"`            TypeValue   int     `json:"T"`        } `json:"E"`    }}func main() {    str := `{"Value": {            "E": [              {                "B": false,                "C": 2.123,                "CE": 0,                "G": 1,                "P": 1000,                "T": 0              }            ]          }        }`    out := &ParsedObjectType{}    if err := json.Unmarshal([]byte(str), out); err != nil {        log.Printf("failed unmarshal %s", err)    }    log.Printf("Constructed: %#v", out)}

慕森卡

    如果你想解析{"B":false,"C":2.123,"CE":0,"G":1,"P":1000,"T":0}为{"B": false,"coefficient": 0,"CE": 0,"group": 0,"period": 0,"type": 0}我认为你的结构应该声明为struct {        B bool        coefficient float32 `json:"C"`        CE float32        group int `json:"G"`        period float32 `json:"P"`        type int `json:"T"`    }    如果你想解析{"B":false,"C":2.123,"CE":0,"G":1,"P":1000,"T":0}为{"B": false,"coefficient": 0,"CE": 0,"group": 0,"period": 0,"type": 0}我认为你的结构应该声明为struct {        B bool        coefficient float32 `json:"C"`        CE float32        group int `json:"G"`        period float32 `json:"P"`        type int `json:"T"`    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go