经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
go语言中的json与map相互转换实现
来源:jb51  时间:2022/8/16 15:27:35  对本文有异议

主要是引入 "encoding/json" 包;用到的也就是其中的两个函数json.Marshal和json.Unmarshal。

1、json.Marshal

  1. #函数定义位于GOROOT or GOPATH的/src/encoding/json/encode.go 中
  2. func Marshal(v interface{}) ([]byte, error) {
  3. e := newEncodeState()
  4. err := e.marshal(v, encOpts{escapeHTML: true})
  5. if err != nil {
  6. return nil, err
  7. }
  8. buf := append([]byte(nil), e.Bytes()...)
  9. encodeStatePool.Put(e)
  10. return buf, nil
  11. }

2、json.Unmarshal

  1. #函数定义位于GOROOT or GOPATH的/src/encoding/json/decode.go 中
  2. func Unmarshal(data []byte, v interface{}) error {
  3. // Check for well-formedness.
  4. // Avoids filling out half a data structure
  5. // before discovering a JSON syntax error.
  6. var d decodeState
  7. err := checkValid(data, &d.scan)
  8. if err != nil {
  9. return err
  10. }
  11. d.init(data)
  12. return d.unmarshal(v)
  13. }
  14. #输入的数据类型是[]byte,string类型的话要转成[]byte.
  15. str1 := "hello"
  16. data := []byte(str1) // 将字符串转为[]byte类型

可见其输入数据的类型是[]byte。对于string类型的数据要转成[]byte类型才可以。

  1. // 当前程序的包名
  2. package main
  3. // 导入其它的包
  4. import (
  5. "encoding/json"
  6. "fmt"
  7. )
  8. func main() {
  9. map2json2map()
  10. }
  11. func map2json2map() {
  12. map1 := make(map[string]interface{})
  13. map1["1"] = "hello"
  14. map1["2"] = "world"
  15. //return []byte
  16. str, err := json.Marshal(map1)
  17. if err != nil {
  18. fmt.Println(err)
  19. }
  20. fmt.Println("map to json", string(str))
  21. //json([]byte) to map
  22. map2 := make(map[string]interface{})
  23. err = json.Unmarshal(str, &map2)
  24. if err != nil {
  25. fmt.Println(err)
  26. }
  27. fmt.Println("json to map ", map2)
  28. fmt.Println("The value of key1 is", map2["1"])
  29. }

到此这篇关于go语言中的json与map相互转换实现的文章就介绍到这了,更多相关go json与map相互转换内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号