json转struct

在已知结构体解析时

下面解析中,传入的json中,相比较多出一些结构键值,不影响转换。 如下所示:

`

// You can edit this code! // Click here and start typing. package main

import ( “bytes” “encoding/json” “fmt” “io” )

const ( DELETE_BODY_NORMAL = { "xlb_name":"lvs1", "xlb_networks":[{ "cidr_v4":"12.62.40.0/24", "cidr_v6":"5efe:ffff:0:f101::/116", "cc": "55" }], "extern": "66" } )

type Cidr struct { V4 string json:"cidr_v4" V6 string json:"cidr_v6" } type NetworksDeleteParams struct { XlbName string json:"xlb_name" XlbNetWorks []Cidr json:"xlb_networks" }

func BodyDecodeToJson(body io.Reader, v interface{}) (err error) { defer func() { if r := recover(); r != nil { err = fmt.Errorf(“decode panic”) } }() if err = json.NewDecoder(body).Decode(v); err != nil { return err } return nil }

func main() { delParams := NetworksDeleteParams{} body := bytes.NewBufferString(DELETE_BODY_NORMAL) BodyDecodeToJson(body, &delParams) fmt.Println(“Hello, 世界”) fmt.Println(delParams) }

`golang

缺少键值结构时,转化struct

如下所示,json字符串中缺少了name字段,解析后,struct的值使用对应类型的空值赋值

`

// You can edit this code! // Click here and start typing. package main

import ( “bytes” “encoding/json” “fmt” “io” )

const ( DELETE_BODY_NORMAL = { "xlb_networks":[{ "cidr_v4":"12.62.40.0/24", "cidr_v6":"5efe:ffff:0:f101::/116", "cc": "55" }], "extern": "66" } )

type Cidr struct { V4 string json:"cidr_v4" V6 string json:"cidr_v6" } type NetworksDeleteParams struct { XlbName string json:"xlb_name" XlbNetWorks []Cidr json:"xlb_networks" }

func BodyDecodeToJson(body io.Reader, v interface{}) (err error) { defer func() { if r := recover(); r != nil { err = fmt.Errorf(“decode panic”) } }() if err = json.NewDecoder(body).Decode(v); err != nil { return err } return nil }

func main() { delParams := NetworksDeleteParams{} body := bytes.NewBufferString(DELETE_BODY_NORMAL) BodyDecodeToJson(body, &delParams) fmt.Println(“Hello, 世界”) fmt.Println(delParams) fmt.Println(delParams.XlbName == “”) } ——————- Hello, 世界 { [{12.62.40.0/24 5efe:ffff:0:f101::/116}]} true

Program exited.

`golang

play ground

https://go.dev/play/p/UYb0-oFKcFm



blog comments powered by Disqus
—  原创作品许可 — 署名-非商业性使用-禁止演绎 3.0 未本地化版本 — CC BY-NC-ND 3.0   —