Golang操作结构体、Map转化为JSON
结构体生成Json
package main import (
"encoding/json"
"fmt"
) type IT struct {
Company string `json:"-"` //此字段不会输出到屏幕
//Company string `json:"company"` 这样打印输出别名首字母就会小写(二次编码)
Subjects []string `json:"subjects"` //二次编码
IsOk bool `json:",string"`
Price float64 `json:",string"`
} func main() {
//定义一个结构体变量,同时初始化
s := IT{"itcast", []string{"Golang", "PHP", "Java", "C++"}, true, 666.666} //编码,根据内容生成json文本
//buf, err := json.Marshal(s)
//buf = {"subjects":["Golang","PHP","Java","C++"],"IsOk":"true","Price":"666.666"}
buf, err := json.MarshalIndent(s, "", " ") //格式化编码
if err != nil {
fmt.Println("err = ", err)
return
} fmt.Println("buf = ", string(buf))
}
//结果
buf = {
"subjects": [ //首字母小写
"Golang",
"PHP",
"Java",
"C++"
],
"IsOk": "true", //string类型
"Price": "666.666"
}
Json转成结构体
package main import (
"encoding/json"
"fmt"
) type IT struct {
Address string `json:"address"`
Languages []string `json:"languages"` //二次编码
Status bool `json:"isok"`
Price float64 `json:"price"`
} func main() { jsonBuf := `
{
"address": "北京",
"languages": [
"Golang",
"PHP",
"Java",
"Python"
],
"status": true,
"price": 666.666
}` var tmp IT //定义一个结构体变量
err := json.Unmarshal([]byte(jsonBuf), &tmp) //第二个参数要地址传递
if err != nil {
fmt.Println("err = ", err)
return
}
//fmt.Println("tmp = ", tmp)
fmt.Printf("tmp = %+v\n", tmp) type IT2 struct {
Subjects []string `json:"languages"` //二次编码
} var tmp2 IT2
err = json.Unmarshal([]byte(jsonBuf), &tmp2) //第二个参数要地址传递
if err != nil {
fmt.Println("err = ", err)
return
}
fmt.Printf("tmp2 = %+v\n", tmp2) }
tmp = {Address:北京 Languages:[Golang PHP Java Python] Status:false Price:666.666}
tmp2 = {Subjects:[Golang PHP Java Python]}
Map生成Json
package main import (
"encoding/json"
"fmt"
) func main() {
//创建一个map
m := make(map[string]interface{}, ) //因为类型多,可以用interface空接口
m["address"] = "北京"
m["languages"] = []string{"Golang", "PHP", "Java", "Python"}
m["status"] = true
m["price"] = 666.666 //编码成json
//result, err := json.Marshal(m)
//result = {"address":"北京","languages":["Golang","PHP","Java","Python"],"price":666.666,"status":true}
result, err := json.MarshalIndent(m, "", " ")
if err != nil {
fmt.Println("err = ", err)
return
}
fmt.Println("result = ", string(result))
}
result = {
"address": "北京",
"languages": [
"Golang",
"PHP",
"Java",
"Python"
],
"price": 666.666,
"status": true
}
Json转化为Map
package main import (
"encoding/json"
"fmt"
) func main() {
jsonBuf := `
{
"company": "itcast",
"subjects": [
"Go",
"C++",
"Python",
"Test"
],
"isok": true,
"price": 666.666
}` //创建一个map
m := make(map[string]interface{}, ) err := json.Unmarshal([]byte(jsonBuf), &m) //第二个参数要地址传递
if err != nil {
fmt.Println("err = ", err)
return
}
fmt.Printf("m = %+v\n", m) // var str string
// str = string(m["company"]) //err, 无法转换
// fmt.Println("str = ", str) var str string //类型断言, 值,它是value类型
for key, value := range m {
//fmt.Printf("%v ============> %v\n", key, value)
switch data := value.(type) {
case string:
str = data
fmt.Printf("map[%s]的值类型为string, value = %s\n", key, str)
case bool:
fmt.Printf("map[%s]的值类型为bool, value = %v\n", key, data)
case float64:
fmt.Printf("map[%s]的值类型为float64, value = %f\n", key, data)
case []string:
fmt.Printf("map[%s]的值类型为[]string, value = %v\n", key, data)
case []interface{}:
fmt.Printf("map[%s]的值类型为[]interface, value = %v\n", key, data)
} } }
map[address]的值类型为string, value = 北京
map[Languages]的值类型为[]interface, value = [Golang PHP Java Python]
map[Status]的值类型为bool, value = true
map[price]的值类型为float64, value = 666.666000
实际项目中建议参考此链接博文:
https://www.kutu66.com//GitHub/article_108925#10-yfsys
Golang操作结构体、Map转化为JSON的更多相关文章
- Golang 入门 : 结构体(struct)
Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型.试图表示一个现实世界中的实体. 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和 ...
- golang 对结构体进行格式化输出
可以使用 `return fmt.Sprintf("%+v", *conf) ` 来打印结构体,包括结构体的key值.但是由于结构体内容较多,都在一行,所以希望可以格式化输出结构体 ...
- 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...
- 『GoLang』结构体与方法
结构体 结构体类型 Go 通过结构体的形式支持用户自定义类型,或者叫定制类型. Go 语言结构体是实现自定义类型的一种重要数据类型. 结构体是复合类型(composite types),它由一系列属性 ...
- golang中结构体标签在json中的应用
package main import ( "encoding/json" "fmt" "reflect" ) type Movie str ...
- 【golang】golang中结构体的初始化方法(new方法)
准备工作: 定义结构体:Student import ( "fmt" "reflect") type Student struct { StudentId st ...
- golang初始化结构体数组
最近组里新项目要求用go来写,没办法只能边看文档边写代码,今天遇到郁闷的问题,查了好久最终发现居然是一个标点符号的导致的,遂纪录之 刚刚给一个接口写单元测试时想初始化一个结构体数组,然后遍历该数组并建 ...
- golang之结构体和方法
结构体的定义 结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型.每个变量都叫做结构体的成员. 其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语 ...
- golang之结构体使用注意事项和细节
1. 结构体的所有字段在内在中是连续的 2. 结构体是用户单独定义的类型,和其它类型进行转换时需要有完全相同的字段(名字.个数和类型) 3. 结构体进行type重新定义(相当于取别名),Golang认 ...
随机推荐
- 【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- Swing
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.011-[疯狂Java讲义第3版 李刚]- Swing Style:EBook Series:Jav ...
- 2019年UI和UX设计趋势:大概是最全的汇总了!
朋友们,很快,2018就要跟我们说
- iOS UI进阶-5.0 蓝牙/加速计/传感器
传感器 实现代码: #import "ViewController.h" @interface ViewController () @end @implementation Vie ...
- Cocos Creator iPhoneX适配的解决办法
研究了5个小时的iPhoneX适配. 从catalog,storyboard,safearea等一系列文章中发现.如果我们想完全撑满全屏.那直接建一个storyboard就好了.但撑满全屏后,流海就是 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (四)(转)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- 29.html5 移动端开发总结
手机与浏览器 浏览器: 移动端开发主要针对手机,ipad等移动设备,随着地铁里的低头族越来越多,移动端开发在前端的开发任务中站的比重也越来越大.各种品牌及尺寸的手机也不尽相同.尺寸不同就算了分辨率,视 ...
- 强化学习---A3C
Asynchronous Advantage Actor-Critic (A3C) 在RL任务中,我们本质上最终要学习的是策略(Policy) value-based方法:间接方法,即通过学习值函数( ...
- github常见错误提示之一
如果输入$ Git remote add origin git@github.com:Jomsou(github帐号名)/gitdemo(项目名).git 提示出错信息:fatal: remote o ...
- 针对IE6,IE7,IE8,IE9,FF等不同浏览器的CSS写法
首先我们介绍一下HACK原理,就是不同浏览器对字符的识别不同 在 CSS中常用特殊字符识别表: (1)*: IE6+IE7都能识别*,而标准浏览器FF+IE8是不能识别*的; (2)!importan ...
- mysql的指令
mysql有一下几方面的特性: 1:多语言支持 2:可以移植性好 3:免费开源 4:高效(支持多线程,充分利用cpu资源,运行速度非常) 5:支持大量数据查询和储存 6:操作简单易于学习 其实数据库就 ...