Golang 父子对象与JSON互相转换以及struct结构体内部的反引号该如何定义字段编码生成json字符串的写法

Golang 父子对象与JSON互相转换以及struct结构体内部的反引号该如何定义字段编码生成json字符串的写法,第1张

概述package main import (     "encoding/json"     "fmt" ) //父对象 type Human struct {     Name   string  `json:"english_name"` //把struct编码成json字符串时,Name字段的key是english_name,而不是Name     Age    int     `json:" package main

import (
"enCoding/Json"
"fmt"
)

//父对象
type Human struct {
name string `Json:"english_name"` //把struct编码成Json字符串时,name字段的key是english_name,而不是name
Age int `Json:"-"` //把struct编码成Json字符串时,会忽略Age这个字段
Weight float64 //`Json:",string"` //编码成字符串,这个string选项只适用字符串,浮点型和整型数据
}

//子对象
type Student struct {
Human
Speciality string
Hobby []string
score float64 `Json:"total,omitempty"` //如果这个字段是空值,则不编码到JsON里面,否则用total为名字编码
Secret []byte `Json:",omitempty"` //如果这个字段是空值,则不编码到JsON里面,否则用Secret为名字编码
//是一个经过base64编码的字符串
}

func main() {
Json1Str := `[
{"name": "James","Age": 22,"Weight":65.80},
{"english_name": "Jack","Age": 27,"Weight":78.50},
{"name": "Kite","Age": 19,"Weight":61.40}]`
//定义一个切片对象
var humans []Human
//Json字符串转换成对象格式
err1 := Json.Unmarshal([]byte(Json1Str),&humans)
if err1 != nil {
fmt.Println(err1)
}
fmt.Println("Json字符串转换成对象格式")
fmt.Println(humans)

fmt.Println("对象集合转换成Json字符串")
//切片初始化3个对象
slice1 := []Human{
Human{name: "James",Age: 22,Weight: 65.80},
Human{name: "Jack",Age: 27,Weight: 78.50},
Human{name: "Kite",Age: 19,Weight: 61.40}}
//对象集合转换成Json字符串
data1,err2 := Json.Marshal(slice1)
if err2 != nil {
fmt.Println(err2)
}
fmt.Println(string(data1))
fmt.Println("=======================================================================================")

stus := make([]Student,0)
jason := Student{
Human: Human{
name: "jason",
Age: 28,
Weight: 60.30},
Speciality: "computer scIEnce",
Hobby: []string{"tennis","swimming","reading"},
score: 725.5,
Secret: []byte{'I',20,'L','o','v','e','Y','u','!'}}
stus = append(stus,jason)
fmt.Println(stus,"\n\r")
//对象集合转换成Json字符串
data2,err3 := Json.Marshal(stus[0])
if err3 != nil {
fmt.Println(err3)
}
fmt.Println(string(data2))

fmt.Println("=======================================================================================")
Json2Str := `[
{"english_name":"jason","Weight":60.3,"Speciality":"computer scIEnce","Hobby":["tennis","reading"],"total":725.5,"Secret":"SRRMb3ZlFFlvdSE="}]`
//定义一个切片对象
var stuss []Student
//Json字符串转换成对象格式
err4 := Json.Unmarshal([]byte(Json2Str),&stuss)
if err4 != nil {
fmt.Println(err4)
}
fmt.Println("Json字符串转换成对象格式")
fmt.Println(stuss)

}




范例 如何获得一个这样的Json格式的数据{"code":200,"msg":"ok","data":{"content":"test"}}


package main

import (
"enCoding/Json"
"fmt"
)

type header struct {
Code int `Json:"code"`
Msg string `Json:"msg"`
Data `Json:"data"`
}

type Data struct {
Content string `Json:"content"`
}

func main() {
in := header{Code: 200,Msg: "ok",Data: Data{Content: "test"}}
out,_ := Json.Marshal(&in)
Json := string(out)
fmt.Println(Json)
}



{"asks":[[1671.7000,24.4247],[1671.8000,1.2068],[1672.0000,2.0000]]} 请问这样的Json,对应的数据结构要怎么定义?




使用Map实现获得同样的结果实现:

package main

import (
"enCoding/Json"
"fmt"
)

func main() {
data := make(map[string][][]float64)
// data["asks"] = [][]float64{[]float64{1671.7000,24.4247},[]float64{1671.8000,1.2068},[]float64{1672.0000,2.0000}}
data["asks"] = [][]float64{{1671.7000,{1671.8000,{1672.0000,2.0000}} // 简写格式
out,_ := Json.Marshal(data)
Json := string(out)
fmt.Println(Json)
}

调试控制台打印输出如下信息:

2017/07/10 11:27:44 server.go:73: Using API v1
2017/07/10 11:27:44 deBUGger.go:97: launching process with args: [/root/code/go/src/contoso.org/Gooo/deBUG www.baIDu.com www.ifeng.com www.sina.com.cn www.qq.com www.taobao.com www.suning.com www.163.com www.iqiyi.com sports.cntv.cn www.jd.com]
API server Listening at: 127.0.0.1:2345
2017/07/10 11:27:45 deBUGger.go:505: continuing
{"asks":[[1671.7,[1671.8,[1672,2]]}

总结

以上是内存溢出为你收集整理的Golang 父子对象与JSON互相转换以及struct结构体内部的反引号该如何定义字段编码生成json字符串的写法全部内容,希望文章能够帮你解决Golang 父子对象与JSON互相转换以及struct结构体内部的反引号该如何定义字段编码生成json字符串的写法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1276985.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存