返回顶部
首页 > 资讯 > 后端开发 > GO >Golang语言JSON解码函数Unmarshal怎么使用
  • 429
分享到

Golang语言JSON解码函数Unmarshal怎么使用

2023-06-26 06:06:34 429人浏览 安东尼
摘要

本篇内容主要讲解“golang语言JSON解码函数Unmarshal怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Golang语言jsON解码函数Unmarshal怎么使用”吧!func

本篇内容主要讲解“golang语言JSON解码函数Unmarshal怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Golang语言jsON解码函数Unmarshal怎么使用”吧!

func Unmarshal

func Unmarshal(data []byte, v interface{}) error

Unmarshal函数解析json编码的数据并将结果存入v指向的值。

Unmarshal和Marshal做相反的操作,必要时申请映射、切片或指针,有如下的附加规则:

要将json数据解码写入一个指针,Unmarshal函数首先处理json数据是json字面值null的情况。此时,函数将指针设为nil;否则,函数将json数据解码写入指针指向的值;如果指针本身是nil,函数会先申请一个值并使指针指向它。

要将json数据解码写入一个结构体,函数会匹配输入对象的键和Marshal使用的键(结构体字段名或者它的标签指定的键名),优先选择精确的匹配,但也接受大小写不敏感的匹配。

要将json数据解码写入一个接口类型值,函数会将数据解码为如下类型写入接口:

bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays
map[string]interface{}, for JSON objects
nil for JSON null

如果一个JSON值不匹配给出的目标类型,或者如果一个json数字写入目标类型时溢出,Unmarshal函数会跳过该字段并尽量完成其余的解码操作。如果没有出现更加严重的错误,本函数会返回一个描述第一个此类错误的详细信息的UnmarshalTypeError。

JSON的null值解码为go的接口、指针、切片时会将它们设为nil,因为null在json里一般表示“不存在”。 解码json的null值到其他go类型时,不会造成任何改变,也不会产生错误。

当解码字符串时,不合法的utf-8或utf-16代理(字符)对不视为错误,而是将非法字符替换为unicode字符U+FFFD。

普通JSON

示例代码:

package mainimport (   "encoding/json"   "fmt")// Actress 女演员type Actress struct {   Name       string   Birthday   string   BirthPlace string   Opus       []string}func main() {   // 普通JSON   // 因为json.UnMarshal() 函数接收的参数是字节切片,   // 所以需要把JSON字符串转换成字节切片。   jsonData := []byte(`{      "name":"迪丽热巴",      "birthday":"1992-06-03",      "birthPlace":"新疆乌鲁木齐市",      "opus":[         "《阿娜尔罕》",         "《逆光之恋》",         "《克拉恋人》"      ]   }`)   var actress Actress   err := json.Unmarshal(jsonData, &actress)   if err != nil {      fmt.Println("error:", err)      return   }   fmt.Printf("姓名:%s\n", actress.Name)   fmt.Printf("生日:%s\n", actress.Birthday)   fmt.Printf("出生地:%s\n", actress.BirthPlace)   fmt.Println("作品:")   for _, val := range actress.Opus {      fmt.Println("\t", val)   }}

运行结果:

姓名:迪丽热巴

生日:1992-06-03

出生地:新疆乌鲁木齐市

作品:

  《阿娜尔罕》

  《逆光之恋》

  《克拉恋人》

JSON内嵌普通JSON

示例代码:

package mainimport (   "encoding/json"   "fmt")// Opus 作品type Opus struct {   Date string   Title string}// Actress 女演员type Actress struct {   Name       string   Birthday   string   BirthPlace string   Opus       Opus}func main () {   // JSON嵌套普通JSON   jsonData := []byte(`{      "name":"迪丽热巴",      "birthday":"1992-06-03",      "birthPlace":"新疆乌鲁木齐市",      "opus": {         "Date":"2013",         "Title":"《阿娜尔罕》"      }   }`)   var actress Actress   err := json.Unmarshal(jsonData, &actress)   if err != nil {      fmt.Println("error:", err)      return   }   fmt.Printf("姓名:%s\n", actress.Name)   fmt.Printf("生日:%s\n", actress.Birthday)   fmt.Printf("出生地:%s\n", actress.BirthPlace)   fmt.Println("作品:")fmt.Printf("\t%s:%s", actress.Opus.Date,   actress.Opus.Title)}

运行结果:

姓名:迪丽热巴

生日:1992-06-03

出生地:新疆乌鲁木齐市

作品:

 2013:《阿娜尔罕》

JSON内嵌数组JSON

示例代码:

package mainimport (   "encoding/json"   "fmt")type Opus struct {   Date string   Title string}type Actress struct {   Name string   Birthday string   BirthPlace string   Opus []Opus}func main () {   // JSON嵌套数组JSON   jsonData := []byte(`{      "name":"迪丽热巴",      "birthday":"1992-06-03",      "birthPlace":"新疆乌鲁木齐市",      "opus":[         {            "date":"2013",            "title":"《阿娜尔罕》"         },         {            "date":"2014",            "title":"《逆光之恋》"         },         {            "date":"2015",            "title":"《克拉恋人》"         }      ]   }`)   var actress Actress   err := json.Unmarshal(jsonData, &actress)   if err != nil {      fmt.Println("error:", err)      return   }   fmt.Printf("姓名:%s\n", actress.Name)   fmt.Printf("生日:%s\n", actress.Birthday)   fmt.Printf("出生地:%s\n", actress.BirthPlace)   fmt.Println("作品:")   for _, val := range actress.Opus {      fmt.Printf("\t%s - %s\n", val.Date, val.Title)   }}

运行结果:

姓名:迪丽热巴

生日:1992-06-03

出生地:新疆乌鲁木齐市

作品:

 2013 - 《阿娜尔罕》

 2014 - 《逆光之恋》

 2015 - 《克拉恋人》

JSON内嵌具有动态Key的JSON

示例代码:

package mainimport (   "encoding/json"   "fmt")// Opus 作品type Opus struct {   Type string   Title string}// Actress 女演员type Actress struct {   Name string   Birthday string   BirthPlace string   Opus map[string]Opus}func main () {   jsonData := []byte(`{      "name":"迪丽热巴",      "birthday":"1992-06-03",      "birthPlace":"新疆乌鲁木齐市",      "opus":{         "2013":{            "Type":"近代革命剧",            "Title":"《阿娜尔罕》"         },         "2014":{            "Type":"奇幻剧",            "Title":"《逆光之恋》"         },         "2015":{            "Type":"爱情剧",            "Title":"《克拉恋人》"         }      }   }`)   var actress Actress   err := json.Unmarshal(jsonData, &actress)   if err != nil {      fmt.Println("error:", err)      return   }   fmt.Printf("姓名:%s\n", actress.Name)   fmt.Printf("生日:%s\n", actress.Birthday)   fmt.Printf("出生地:%s\n", actress.BirthPlace)   fmt.Println("作品:")   for index, value := range actress.Opus {      fmt.Printf("\t日期:%s\n", index)      fmt.Printf("\t\t分类:%s\n", value.Type)      fmt.Printf("\t\t标题:%s\n", value.Title)   }}

运行结果:

姓名:迪丽热巴

生日:1992-06-03

出生地:新疆乌鲁木齐市

作品:

 日期:2013

 分类:近代革命剧

 标题:《阿娜尔罕》

 日期:2014

 分类:奇幻剧

 标题:《逆光之恋》

 日期:2015

 分类:爱情剧

 标题:《克拉恋人》

总结

我们先是介绍了Golang标准库的encoding/json包中的Unmarshal函数,然后通过上面4个示例代码,分别介绍了如何解码以下4种JSON格式数据:

JSON格式1:

{    "name":"迪丽热巴",    "birthday":"1992-06-03",    "birthPlace":"新疆乌鲁木齐市",    "opus":[        "《阿娜尔罕》",        "《逆光之恋》",        "《克拉恋人》"    ]}

JSON格式2:

{    "name":"迪丽热巴",    "birthday":"1992-06-03",    "birthPlace":"新疆乌鲁木齐市",    "opus":{        "Date":"2013",        "Title":"《阿娜尔罕》"    }}

JSON格式3:

{    "name":"迪丽热巴",    "birthday":"1992-06-03",    "birthPlace":"新疆乌鲁木齐市",    "opus":[        {            "date":"2013",            "title":"《阿娜尔罕》"        },        {            "date":"2014",            "title":"《逆光之恋》"        },        {            "date":"2015",            "title":"《克拉恋人》"        }    ]}

JSON格式4:

{    "name":"迪丽热巴",    "birthday":"1992-06-03",    "birthPlace":"新疆乌鲁木齐市",    "opus":{        "2013":{            "Type":"近代革命剧",            "Title":"《阿娜尔罕》"        },        "2014":{            "Type":"奇幻剧",            "Title":"《逆光之恋》"        },        "2015":{            "Type":"爱情剧",            "Title":"《克拉恋人》"        }    }}

到此,相信大家对“Golang语言JSON解码函数Unmarshal怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: Golang语言JSON解码函数Unmarshal怎么使用

本文链接: https://lsjlt.com/news/307279.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Golang语言JSON解码函数Unmarshal怎么使用
    本篇内容主要讲解“Golang语言JSON解码函数Unmarshal怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Golang语言JSON解码函数Unmarshal怎么使用”吧!func...
    99+
    2023-06-26
  • Golang语言JSON解码函数Unmarshal的使用
    目录前言func Unmarshal普通JSONJSON内嵌普通JSONJSON内嵌数组JSONJSON内嵌具有动态Key的JSON总结前言 工作中我们经常会遇到解码JSON格式的数...
    99+
    2024-04-02
  • Go语言怎么利用Unmarshal解析json字符串
    这篇文章主要介绍“Go语言怎么利用Unmarshal解析json字符串”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言怎么利用Unmarshal解析json字符串”文章能帮助大家解决问题。简单...
    99+
    2023-06-30
  • Go语言利用Unmarshal解析json字符串的实现
    简单的解析例子: 首先还是从官方文档中的例子: package main import (     "fmt"     "encoding/json" ) type Animal...
    99+
    2024-04-02
  • 在golang中使用Unmarshal将json赋给struct时出错如何解决
    在golang中使用Unmarshal将json赋给struct时出错如何解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。将json:{ "...
    99+
    2023-06-14
  • 使用golang中的json.NewDecoder函数解码JSON字符串到结构体
    使用golang中的json.NewDecoder函数解码JSON字符串到结构体在Go语言中,我们经常需要将JSON字符串解码成对应的结构体。为了简化这个过程,Go标准库中提供了一个json.NewDecoder函数,它能够方便地将JSON...
    99+
    2023-11-18
    解码 Golang JSON
  • C语言函数参数怎么使用
    本篇内容主要讲解“C语言函数参数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言函数参数怎么使用”吧!一、函数参数函数参数在本质上与局部变量相同在栈上分配空间函数参数的初始值是函数调...
    99+
    2023-06-30
  • c语言playsound函数怎么使用
    在C语言中,可以使用`PlaySound`函数来播放音频文件。`PlaySound`函数位于`mmsystem.h`头文件中,需要使...
    99+
    2023-09-16
    c语言
  • c语言getinput函数怎么使用
    在C语言中,没有现成的`getinput`函数,您需要自己编写一个函数来获取输入。下面是一个示例:```c#include void...
    99+
    2023-09-16
    c语言
  • c语言cmp函数怎么使用
    在C语言中,可以使用cmp函数来比较两个元素的大小。该函数需要自定义实现,因为C语言本身不提供cmp函数。cmp函数应该返回一个整数...
    99+
    2023-09-16
    c语言
  • 怎么使用C语言sprintf函数
    本篇内容主要讲解“怎么使用C语言sprintf函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用C语言sprintf函数”吧!一.sprintf 函数简介sprintf 函数用于将格式化...
    99+
    2023-06-25
  • c语言wait函数怎么使用
    在C语言中,`wait()`函数用于让父进程等待子进程的结束。其语法如下:```c#include #include pid_t w...
    99+
    2023-09-11
    c语言
  • C语言OutputDebugString函数怎么使用
    OutputDebugString函数是Windows API中的一个函数,用于向调试器输出调试信息。它的原型如下:```cvoid...
    99+
    2023-09-14
    C语言
  • c语言loadimage()函数怎么使用
    loadimage()函数是C语言中的一个函数,用于加载图像文件。它的使用方法如下:1. 首先,需要在程序中包含相关的头文件:```...
    99+
    2023-09-14
    c语言
  • C语言LoadImageA函数怎么使用
    在C语言中,可以使用LoadImageA函数来加载图像文件。下面是一个使用LoadImageA函数的示例:```c#include ...
    99+
    2023-09-13
    C语言
  • C语言memcpy函数怎么使用
    memcpy函数是C语言中的一个内存拷贝函数,用于将源内存区域的数据复制到目标内存区域。它的函数原型如下:```cvoid* mem...
    99+
    2023-09-08
    C语言 memcpy
  • c语言sizeof函数怎么使用
    在C语言中,sizeof是一个用于获取数据类型或变量占用内存大小的运算符。它的使用方式有以下几种:1. 获取数据类型的大小:size...
    99+
    2023-08-31
    c语言 sizeof
  • c语言createFileA函数怎么使用
    createFileA函数是用来创建一个文件的函数,其使用方法如下:1. 首先,你需要包含头文件 `windows.h`,因为`cr...
    99+
    2023-09-08
    c语言 createFileA
  • r语言colnames函数怎么使用
    在R语言中,colnames()函数用于获取或设置数据框或矩阵的列名。下面是colnames()函数的使用方法: 获取列名:使用c...
    99+
    2023-10-23
    r语言
  • c语言loop函数怎么使用
    C语言中的循环语句可以使用不同的方式实现,包括for循环、while循环和do-while循环。下面以这三种常见的循环方式介绍如何使...
    99+
    2023-10-25
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作