json数据转换成结构体
Posted 技术社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json数据转换成结构体相关的知识,希望对你有一定的参考价值。
package main import ( "encoding/json" "fmt" ) type IT1 struct { Company string `json:"company"` Subjects []string `json:"subjects"` IsOk bool `json:"isok"` Price float64 `json:"price"` } type IT2 struct { Company string `json:"company"` } func main(){ jsonbuff :=`{ "company": "zhczGO", "isok": true, "price": 99, "subjects": [ "go", "fabric", "python", "Test" ] }` var temp IT1 err :=json.Unmarshal([]byte(jsonbuff),&temp) if err != nil{ fmt.Println("err=",err) return } //fmt.Println("temp=",temp) fmt.Printf("tmp=%+v ",temp) var temp2 IT2 err = json.Unmarshal([]byte(jsonbuff),&temp2) if err != nil{ fmt.Println("err=",err) return } fmt.Printf("tmp2=%+v ",temp2) }
package main import ( "encoding/json" "fmt" ) func main() { jsonbuff :=`{ "company": "zhczGO", "isok": true, "price": 99, "subjects": [ "go", "fabric", "python", "Test" ] }` //创建一个map m := make(map[string]interface{},4) err := json.Unmarshal([]byte(jsonbuff),&m) //一定要是地址 if err != nil{ fmt.Println("err=",err) return } fmt.Printf("m=%+v/n",m) //var str string //str = m["company"]//err 无法转换 //类型断言 for key,value := range m { switch data := value.(type) { case string: //str = data fmt.Printf("map[%s]的值类型为string,value=%s ",key,data) case bool: fmt.Printf("map[%s]的值类型为bool,value=%v ",key,data) case float64: fmt.Printf("map[%s]的值类型为float64,value=%f ",key,data) case []string: fmt.Printf("map[%s]的值类型为[]string,value=%v ",key,data) case []interface{}: fmt.Printf("map[%s]的值类型为interface{},value=%v ",key,data) } } }
以上是关于json数据转换成结构体的主要内容,如果未能解决你的问题,请参考以下文章
Golang basic_leaming结构体和 Json 相互转换序列化反序列化