结构体生成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的更多相关文章

  1. Golang 入门 : 结构体(struct)

    Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型.试图表示一个现实世界中的实体. 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和 ...

  2. golang 对结构体进行格式化输出

    可以使用 `return fmt.Sprintf("%+v", *conf) ` 来打印结构体,包括结构体的key值.但是由于结构体内容较多,都在一行,所以希望可以格式化输出结构体 ...

  3. 将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. ...

  4. 『GoLang』结构体与方法

    结构体 结构体类型 Go 通过结构体的形式支持用户自定义类型,或者叫定制类型. Go 语言结构体是实现自定义类型的一种重要数据类型. 结构体是复合类型(composite types),它由一系列属性 ...

  5. golang中结构体标签在json中的应用

    package main import ( "encoding/json" "fmt" "reflect" ) type Movie str ...

  6. 【golang】golang中结构体的初始化方法(new方法)

    准备工作: 定义结构体:Student import ( "fmt" "reflect") type Student struct { StudentId st ...

  7. golang初始化结构体数组

    最近组里新项目要求用go来写,没办法只能边看文档边写代码,今天遇到郁闷的问题,查了好久最终发现居然是一个标点符号的导致的,遂纪录之 刚刚给一个接口写单元测试时想初始化一个结构体数组,然后遍历该数组并建 ...

  8. golang之结构体和方法

    结构体的定义 结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型.每个变量都叫做结构体的成员. 其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语 ...

  9. golang之结构体使用注意事项和细节

    1. 结构体的所有字段在内在中是连续的 2. 结构体是用户单独定义的类型,和其它类型进行转换时需要有完全相同的字段(名字.个数和类型) 3. 结构体进行type重新定义(相当于取别名),Golang认 ...

随机推荐

  1. SQL简单操作

    删除表数据,保留表结构: delete from employee 将删除所有的记录 delete from employee where lastname = 'May' 这条语句是从emplyee ...

  2. Linux下修改MySQL数据库字符编码为UTF-8解决中文乱码

    由于MySQL编码原因会导致数据库出现乱码. 解决办法: 修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码. 具体操作: 1.进入MySQL控制台 &g ...

  3. InstallShield :cannot rename directory ...

    InstallShield项目编译的生成目录文件夹需要关闭.

  4. LeetCode160.相交链表

    编写一个程序,找到两个单链表相交的起始节点. 例如,下面的两个链表: A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3 在节点 c1 开始相交. 注意: 如果两个 ...

  5. jQuery-切换事件2

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. uvm设计分析——field automation

    uvm中的field_automation主要实现了class中的基础元素的copy,compare等函数, 实现方式分为两种:1)用户注册,field系列宏:uvm内部调用static status ...

  7. word自动编号后面空格位置太大了

    选择你需要调整的段落.右键点击.选择“调整列表缩进” 然后在弹出的窗口中,第三行的“制表符”改成“空格”即可.或者空格都不需要可以改为“不特别标注”

  8. https://scrapingclub.com/exercise/detail_cookie/

    def parse(self, response): pattern=re.compile('token=(.*?);') token=pattern.findall( response.header ...

  9. 关于 redis、memcache、mongoDB 的对比 转

    从以下几个维度,对 redis.memcache.mongoDB 做了对比.1.性能都比较高,性能对我们来说应该都不是瓶颈.总体来讲,TPS 方面 redis 和 memcache 差不多,要大于 m ...

  10. 仿照admin实现一个自定义的增删改查的组件

    1.首先,创建三个项目,app01,app02,stark,在settings里边记得配置.然后举例:在app01的model里边写表,用的db.sqlite3,所以数据库不用再settings里边配 ...