结构体生成Json

  1. package main
  2.  
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. )
  7.  
  8. type IT struct {
  9. Company string `json:"-"` //此字段不会输出到屏幕
  10. //Company string `json:"company"` 这样打印输出别名首字母就会小写(二次编码)
  11. Subjects []string `json:"subjects"` //二次编码
  12. IsOk bool `json:",string"`
  13. Price float64 `json:",string"`
  14. }
  15.  
  16. func main() {
  17. //定义一个结构体变量,同时初始化
  18. s := IT{"itcast", []string{"Golang", "PHP", "Java", "C++"}, true, 666.666}
  19.  
  20. //编码,根据内容生成json文本
  21. //buf, err := json.Marshal(s)
  22. //buf = {"subjects":["Golang","PHP","Java","C++"],"IsOk":"true","Price":"666.666"}
  23. buf, err := json.MarshalIndent(s, "", " ") //格式化编码
  24. if err != nil {
  25. fmt.Println("err = ", err)
  26. return
  27. }
  28.  
  29. fmt.Println("buf = ", string(buf))
  30. }
  1. //结果
  2. buf = {
  3. "subjects": [ //首字母小写
  4. "Golang",
  5. "PHP",
  6. "Java",
  7. "C++"
  8. ],
  9. "IsOk": "true", //string类型
  10. "Price": "666.666"
  11. }

Json转成结构体

  1. package main
  2.  
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. )
  7.  
  8. type IT struct {
  9. Address string `json:"address"`
  10. Languages []string `json:"languages"` //二次编码
  11. Status bool `json:"isok"`
  12. Price float64 `json:"price"`
  13. }
  14.  
  15. func main() {
  16.  
  17. jsonBuf := `
  18. {
  19. "address": "北京",
  20. "languages": [
  21. "Golang",
  22. "PHP",
  23. "Java",
  24. "Python"
  25. ],
  26. "status": true,
  27. "price": 666.666
  28. }`
  29.  
  30. var tmp IT //定义一个结构体变量
  31. err := json.Unmarshal([]byte(jsonBuf), &tmp) //第二个参数要地址传递
  32. if err != nil {
  33. fmt.Println("err = ", err)
  34. return
  35. }
  36. //fmt.Println("tmp = ", tmp)
  37. fmt.Printf("tmp = %+v\n", tmp)
  38.  
  39. type IT2 struct {
  40. Subjects []string `json:"languages"` //二次编码
  41. }
  42.  
  43. var tmp2 IT2
  44. err = json.Unmarshal([]byte(jsonBuf), &tmp2) //第二个参数要地址传递
  45. if err != nil {
  46. fmt.Println("err = ", err)
  47. return
  48. }
  49. fmt.Printf("tmp2 = %+v\n", tmp2)
  50.  
  51. }
  1. tmp = {Address:北京 Languages:[Golang PHP Java Python] Status:false Price:666.666}
  2. tmp2 = {Subjects:[Golang PHP Java Python]}

Map生成Json

  1. package main
  2.  
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. )
  7.  
  8. func main() {
  9. //创建一个map
  10. m := make(map[string]interface{}, ) //因为类型多,可以用interface空接口
  11. m["address"] = "北京"
  12. m["languages"] = []string{"Golang", "PHP", "Java", "Python"}
  13. m["status"] = true
  14. m["price"] = 666.666
  15.  
  16. //编码成json
  17. //result, err := json.Marshal(m)
  18. //result = {"address":"北京","languages":["Golang","PHP","Java","Python"],"price":666.666,"status":true}
  19. result, err := json.MarshalIndent(m, "", " ")
  20. if err != nil {
  21. fmt.Println("err = ", err)
  22. return
  23. }
  24. fmt.Println("result = ", string(result))
  25. }
  1. result = {
  2. "address": "北京",
  3. "languages": [
  4. "Golang",
  5. "PHP",
  6. "Java",
  7. "Python"
  8. ],
  9. "price": 666.666,
  10. "status": true
  11. }

Json转化为Map

  1. package main
  2.  
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. )
  7.  
  8. func main() {
  9. jsonBuf := `
  10. {
  11. "company": "itcast",
  12. "subjects": [
  13. "Go",
  14. "C++",
  15. "Python",
  16. "Test"
  17. ],
  18. "isok": true,
  19. "price": 666.666
  20. }`
  21.  
  22. //创建一个map
  23. m := make(map[string]interface{}, )
  24.  
  25. err := json.Unmarshal([]byte(jsonBuf), &m) //第二个参数要地址传递
  26. if err != nil {
  27. fmt.Println("err = ", err)
  28. return
  29. }
  30. fmt.Printf("m = %+v\n", m)
  31.  
  32. // var str string
  33. // str = string(m["company"]) //err, 无法转换
  34. // fmt.Println("str = ", str)
  35.  
  36. var str string
  37.  
  38. //类型断言, 值,它是value类型
  39. for key, value := range m {
  40. //fmt.Printf("%v ============> %v\n", key, value)
  41. switch data := value.(type) {
  42. case string:
  43. str = data
  44. fmt.Printf("map[%s]的值类型为string, value = %s\n", key, str)
  45. case bool:
  46. fmt.Printf("map[%s]的值类型为bool, value = %v\n", key, data)
  47. case float64:
  48. fmt.Printf("map[%s]的值类型为float64, value = %f\n", key, data)
  49. case []string:
  50. fmt.Printf("map[%s]的值类型为[]string, value = %v\n", key, data)
  51. case []interface{}:
  52. fmt.Printf("map[%s]的值类型为[]interface, value = %v\n", key, data)
  53. }
  54.  
  55. }
  56.  
  57. }
  1. map[address]的值类型为string, value = 北京
  2. map[Languages]的值类型为[]interface, value = [Golang PHP Java Python]
  3. map[Status]的值类型为bool, value = true
  4. 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. GENIA语料库学习【转载】

    来自论文:GENIA corpus—a semantically annotated corpus for bio-textmining  2003 1.介绍 GENIA corpus, a sema ...

  2. 23-Python3 File

    ''' file(文件)方法 ''' #open()对象 pass #file对象 ##file.close():关闭文件,关闭后不能再进行读写操作 fo1 = open('/Users/ligaij ...

  3. [LeetCode] 441. Arranging Coins_Easy tag: Math

    You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...

  4. Elasticsearch5.x创建索引(Java)

    索引创建代码使用官方给的示例代码,我把它在java项目里实现了一遍. 官方示例 1.创建索引 /** * Java创建Index */ public void CreateIndex() { int ...

  5. Tesseract 模块

    https://www.cnblogs.com/new-june/p/9249903.html

  6. 实验源码,DES,AES,RSA,椭圆曲线

    https://pan.baidu.com/s/1CPA-bnLmcJR_AFsNImhUjQ

  7. CSU 1857 Crash and Go(relians)(模拟)

    Crash and Go(relians) [题目链接]Crash and Go(relians) [题目类型]模拟 &题解: 这就是要严格的按照题意说的模拟就好了,也就是:每次添加进来一个圆 ...

  8. D Cloud of Hashtags Codeforces Round #401 (Div. 2)

    Cloud of Hashtags [题目链接]Cloud of Hashtags &题意: 给你一个n,之后给出n个串,这些串的总长度不超过5e5,你要删除最少的单词(并且只能是后缀),使得 ...

  9. 从0开始搭建vue+webpack脚手架(一)

    基于多数情况下都是使用vue-cli初始化项目, 却始终未去了解其原理.从零开始搭建,可以让自己更深层次的理解框架. 首先从最基本的npm 开始, 至于安装npm 和 node就不用再赘述了,那是前端 ...

  10. mysqldump导出数据

    如果导出的数据是乱码,需要制定--default-character-set= mysqldump -h wn-fala-v2-cluster.cluster-cczg3tb617nn.eu-cent ...