Golang Json 编解码

这篇具有很好参考价值的文章主要介绍了Golang Json 编解码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

编码

json.NewEncoder(<Writer>).encode(v)
json.Marshal(&v)

解码

json.NewDecoder(<Reader>).decode(&v)
json.Unmarshal([]byte, &v)

使用示例

type Person struct {
    Name string `json:"name"`
    Age int `json:"age"`
}
func main()  {
    // 1. 使用 json.Marshal 编码
    person1 := Person{"张三", 24}
    bytes1, err := json.Marshal(&person1)
    if err == nil {
        // 返回的是字节数组 []byte
        fmt.Println("json.Marshal 编码结果: ", string(bytes1))
    }


    // 2. 使用 json.Unmarshal 解码
    str := `{"name":"李四","age":25}`
    // json.Unmarshal 需要字节数组参数, 需要把字符串转为 []byte 类型
    bytes2 := []byte(str) // 字符串转换为字节数组
    var person2 Person    // 用来接收解码后的结果
    if json.Unmarshal(bytes2, &person2) == nil {
        fmt.Println("json.Unmarshal 解码结果: ", person2.Name, person2.Age)
    }


    // 3. 使用 json.NewEncoder 编码
    person3 := Person{"王五", 30}
    // 编码结果暂存到 buffer
    bytes3 := new(bytes.Buffer)
    _ = json.NewEncoder(bytes3).Encode(person3)
    if err == nil {
        fmt.Print("json.NewEncoder 编码结果: ", string(bytes3.Bytes()))
    }


    // 4. 使用 json.NewDecoder 解码
    str4 := `{"name":"赵六","age":28}`
    var person4 Person
    // 创建一个 string reader 作为参数
    err = json.NewDecoder(strings.NewReader(str4)).Decode(&person4)
    if err == nil {
        fmt.Println("json.NewDecoder 解码结果: ", person4.Name, person4.Age)
    }

未知类型处理

使用 interface 接收 json.Unmarshal 的结果,然后利用 type assertion 特性 (把解码结果转换为 map[string]interface{} 类型) 来进行后续操作。

func main() {
    b := []byte(`{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}`)


    var f interface{}
    json.Unmarshal(b, &f)


    m := f.(map[string]interface{})
    fmt.Println(m["Parents"])  // 读取 json 内容
    fmt.Println(m["a"] == nil) // 判断键是否存在
}

marshal和NewDecoder区别

1、json.NewDecoder是从一个流里面直接进行解码,代码精干

2、json.Unmarshal是从已存在与内存中的json进行解码

3、相对于解码,json.NewEncoder进行大JSON的编码比json.marshal性能高,因为内部使用pool

场景应用

1、json.NewDecoder用于http连接与socket连接的读取与写入,或者文件读取

2、json.Unmarshal用于直接是byte的输入文章来源地址https://www.toymoban.com/news/detail-605305.html

func HandleUse(w http.ResponseWriter, r *http.Request) {
    var u Use
    if err := json.NewDecoder(r.Body).Decode(&u); err != nil {
        w.WriteHeader(http.StatusInternalServerError)
        return
    }
    w.WriteHeader(http.StatusOK)
    fmt.Fprintf(w, "姓名:%s,年龄:%d", u.Name, u.Age)
}

将Json数据转换为map切片

//将json数据转换为map切片
func maina6(){
    jsonStr := `[{"age":21,"hobby":["打"],"name":"liyi","sex":true},{"name":"linging"},{"age":18,"hobby":["学习"],"name":"yiyi","sex":true}]`
    jsonBytes := []byte(jsonStr)
    dataSlice := make([]map[string]interface{},0)
    err := json.Unmarshal(jsonBytes,&dataSlice)
    if err != nil {
        fmt.Println("反序列化失败,err=",err)
    }
    fmt.Println(dataSlice)
}

到了这里,关于Golang Json 编解码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Xcode 15 beta (15A5160n) - Apple 平台 IDE

    Xcode 15 beta (15A5160n) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-15/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Xcode 15 使您能够为所有 Apple 平台开发、测试和分发应用程序。通过增强的代码完成、交互式预

    2024年02月09日
    浏览(45)
  • 在虚拟机上安装macOS和Xcode

    最近要开发iOS软件,开发软件的操作系统需要是macOS,开发工具是Xcode。虽然实验室有苹果电脑,但是还是想在自己电脑上安装macOS虚拟机和Xcode软件,这样的话在宿舍或者在家都能开发。按照网上的教程成功安装了macOS和Xcode,主要参考的是macOS虚拟机安装全过程(VMware)_cop

    2024年02月06日
    浏览(82)
  • Xcode 15 beta 4 (15A5195m) - Apple 平台 IDE

    Xcode 15 beta 4 (15A5195m) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-15/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org visonOS 支持已更新。 Xcode 15 使您能够为所有 Apple 平台开发、测试和分发应用程序。通过增强的

    2024年02月16日
    浏览(51)
  • Xcode 15 beta (15A5160n) 下载 - Apple 平台 IDE

    Xcode 15 beta (15A5160n) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-15/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Xcode 15 使您能够为所有 Apple 平台开发、测试和分发应用程序。通过增强的代码完成、交互式预

    2024年02月11日
    浏览(55)
  • Xcode 15.0.1 (15A507) 发布下载 - Apple 平台 IDE

    Xcode 15.0.1 (15A507) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-15/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org visonOS 支持已更新。 Xcode 15 使您能够为所有 Apple 平台开发、测试和分发应用程序。通过增强的代

    2024年02月08日
    浏览(46)
  • Xcode 14.3.1 (14E300c) 下载 - Apple 平台 IDE

    Xcode 14.3.1 (14E300c) 下载 - Apple 平台 IDE Command Line Tools for Xcode 14, tvOS 16 watchOS 9 Simulator Runtime 请访问原文链接:https://sysin.org/blog/apple-xcode-14/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Xcode 14 包含了在所有 Apple 平台上开发、测试和分发 App 所需的一切资源。

    2024年02月10日
    浏览(45)
  • Xcode 15.2 (15C500b) 发布 (含下载) - Apple 平台 IDE

    Xcode 15.2 (15C500b) 发布 (含下载) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 北京时间今日(2023-01-09)凌晨,Xcode 15.2 终于发布,包含了 SDKs for iOS 17.2, iPadOS 17.2, tvOS 17.2, watchOS 10.2, macOS Sonoma 14.2, 和 visionOS,版本号终于一致,广大人民群众终于不在迷茫。 请访问原文链接:

    2024年02月03日
    浏览(46)
  • 搭建虚拟机Macos及安装XCode(问题解决)

    前言:安装Mac虚拟机的过程中遇到了一系列的问题,接下来将按照安装流程阐述每个步骤中所遇难题及相应的解决方法(电脑系统是Win11)。 1. 下载安装所需文件,安装并解锁unlocker 首先按照教程技能 | Win10系统安装苹果Mac虚拟机 - 知乎下载了相应文件( 先别下!!! ),包

    2024年02月07日
    浏览(50)
  • Xcode 15 beta 6 (15A5219j) 发布下载 - Apple 平台 IDE

    Xcode 15 beta 6 (15A5219j) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-15/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org visonOS 支持已更新。 Xcode 15 使您能够为所有 Apple 平台开发、测试和分发应用程序。通过增强的

    2024年02月13日
    浏览(40)
  • Xcode 15 beta 3 (15A5195k) 发布下载 - Apple 平台 IDE

    Xcode 15 beta 3 (15A5195k) 发布下载 - Apple 平台 IDE (visonOS 1 beta 已发布) 7 月 5 日(北京时间今日凌晨)已发布。 IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-15/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Xcode 15 使您能够为所有

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包