go语言中的json与map相互转换实现

 更新时间:2022年08月16日 11:29:13   作者:焱齿  
本文主要介绍了go语言中的json与map相互转换实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

1、json.Marshal

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

2、json.Unmarshal

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

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

// 当前程序的包名
package main
 
// 导入其它的包
import (
    "encoding/json"
    "fmt"
)
 
func main() {
    map2json2map()
}
 
func map2json2map() {
 
    map1 := make(map[string]interface{})
    map1["1"] = "hello"
    map1["2"] = "world"
    //return []byte
    str, err := json.Marshal(map1)
 
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("map to json", string(str))
 
    //json([]byte) to map
    map2 := make(map[string]interface{})
    err = json.Unmarshal(str, &map2)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("json to map ", map2)
    fmt.Println("The value of key1 is", map2["1"])
}

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

相关文章

  • Go 中实现超时控制的方案

    Go 中实现超时控制的方案

    这篇文章主要介绍了Go 里的超时控制实现方案,本文给大家带来两种解决方案,第一种方案是 Time.After(d Duration),第二种方案是利用 context,go 的 context 功能强大,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2021-10-10
  • Go语言append切片添加元素的实现

    Go语言append切片添加元素的实现

    本文主要介绍了Go语言append切片添加元素的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • golang实现枚举的几种方式

    golang实现枚举的几种方式

    在Go语言中,虽没有内置枚举类型,但可通过常量、结构体或自定义类型和方法实现枚举功能,这些方法提高了代码的可读性和维护性,避免了魔法数字的使用,感兴趣的可以了解一下
    2024-09-09
  • Go语言的os包中常用函数初步归纳

    Go语言的os包中常用函数初步归纳

    这篇文章主要介绍了Go语言的os包中常用函数初步归纳,用于一些和系统交互功能的实现,需要的朋友可以参考下
    2015-10-10
  • 详解Golang函数式选项(Functional Options)模式

    详解Golang函数式选项(Functional Options)模式

    什么是函数式选项模式,为什么要这么写,这个编程模式解决了什么问题呢?其实就是为了解决动态灵活的配置不同的参数的问题。下面通过本文给大家介绍Golang函数式选项(Functional Options)模式的问题,感兴趣的朋友一起看看吧
    2021-12-12
  • 一文带你深入理解Golang Context包

    一文带你深入理解Golang Context包

    在 Go 语言中,Context 包是一种非常常用的工具,它被用来管理 goroutine 之间的通信和取消。本文将深入探讨Context 包的基本原理,包括使用场景、原理和一些最佳实践,需要的可以参考下
    2023-05-05
  • Golang中常用的语法糖分享

    Golang中常用的语法糖分享

    语法糖,也称糖语法,是由英国计算机科学家彼得·兰丁提出的,用于表示编程语言中的某种类型的语法,这些语法不会影响功能,但使用起来却很方便,本文就来看看Golang中常用的语法糖有哪些吧
    2023-05-05
  • Golang实现协程超时控制的方式总结

    Golang实现协程超时控制的方式总结

    我们知道,go协程如果不做好处理,很容易造成内存泄漏,所以对goroutine做超时控制,才能有效避免这种情况发生,本文为大家整理了两个常见的Golang超时控制方法,需要的可以收藏一下
    2023-05-05
  • Go 1.22版本新特性前瞻

    Go 1.22版本新特性前瞻

    这篇文章主要为大家介绍了Go 1.22版本新特性前瞻,包含语言的变化,编译器、运行时与工具链等应用对比详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Go语言如何获取goroutine的id

    Go语言如何获取goroutine的id

    在Go语言中,获取 goroutine的id并不像其他编程语言那样容易,但依然有办法,这篇文章就来和大家聊聊具体实现的方法,感兴趣的小伙伴可以了解下
    2024-12-12

最新评论