Go 结构体、数组、字典和 json 字符串的相互转换方法

Go 语言中 encoding/json 包可以很方便的将结构体、数组、字典转换为 json 字符串。

引用

import "encoding/json"

解析语法

// v 传入结构体、数组等实例变量
// []byte 字节数组
// error 可能会有的错误
func Marshal(v interface{}) ([]byte, error)

反解析

// []byte 字节数组
// v 传入结构体、数组等实例变量的指针地址
// error 可能会有的错误
func Unmarshal(data []byte, v interface{}) error

代码

package main

// https://golang.org/pkg/encoding/json/
// https://cloud.tencent.com/developer/section/1141542#stage-100023262

import (
 "fmt"
 "encoding/json"
)

type User struct {
 Id int `json:"id"`
 Name string `json:"name"`
}

func main() {
 // 字符串解析为结构体
 s := `{"id": 1, "name": "wxnacy"}`

 var user User
 // 将字符串反解析为结构体
 json.Unmarshal([]byte(s), &user)
 fmt.Println(user) // {1 wxnacy}

 var d map[string]interface{}
 // 将字符串反解析为字典
 json.Unmarshal([]byte(s), &d)
 fmt.Println(d)  // map[id:1 name:wxnacy]

 s = `[1, 2, 3, 4]`
 var a []int
 // 将字符串反解析为数组
 json.Unmarshal([]byte(s), &a)
 fmt.Println(a)  // [1 2 3 4]

 // 将结构体解析为字符串
 b, e := json.Marshal(user)
 fmt.Println(e)
 fmt.Println(string(b)) // {"id":1,"name":"wxnacy"}

 b, e = json.Marshal(a)
 fmt.Println(string(b), e) // [1,2,3,4] <nil>

 b, e = json.Marshal(d)
 fmt.Println(string(b), e) // {"id":1,"name":"wxnacy"} <nil>
}

以上这篇Go 结构体、数组、字典和 json 字符串的相互转换方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • golang结构体与json格式串实例代码

    具体代码如下所示: package main import ( "encoding/json" "fmt" ) type IT struct { //一定要注意这里的成员变量的名字首字母必须是大写 Company string Subjects []string Isok bool Price float64 } func main() { s := IT{"zyg", []string{"go", "python&

  • Go语言中转换JSON数据简单例子

    Go语言转换JSON数据真是非常的简单. 以EasyUI的Demo为例,将/demo/datagrid/datagrid_data1.json 拷贝到$GOPATH/src目录: JSON.go: 复制代码 代码如下: package main import (         "encoding/json"         "fmt"         "io/ioutil" ) type product struct {         Pro

  • go语言使用第三方包 json化结构体操作示例

    本文实例讲述了go语言使用第三方包 json化结构体操作.分享给大家供大家参考,具体如下: 前提条件:安装好操作系统对应的git go get -u github.com/pquerna/ffjson -u参数:如果本地已经存在该包,则强制更新. 1.既然是把结构体转为json字符串,那么先来定义一个结构体 复制代码 代码如下: // 定义一个结构体 type NewsModel struct {  Id int  Title string } 2.且看ffjson这包用什么方法来把结构体转为j

  • Go 结构体、数组、字典和 json 字符串的相互转换方法

    Go 语言中 encoding/json 包可以很方便的将结构体.数组.字典转换为 json 字符串. 引用 import "encoding/json" 解析语法 // v 传入结构体.数组等实例变量 // []byte 字节数组 // error 可能会有的错误 func Marshal(v interface{}) ([]byte, error) 反解析 // []byte 字节数组 // v 传入结构体.数组等实例变量的指针地址 // error 可能会有的错误 func Un

  • C语言结构体数组常用的三种赋值方法(包含字符串)

    目录 一.按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy) 二.对数组整体进行赋值.(一次性需要把所有的都添加进去,不需要strcpy) (1) 在声明数组的时候,进行赋值 (2)对有规律的数据赋值,比如学生结构体的学号是有规律的. 三.使用输入进行赋值 总结 一.按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy) 这里使用了一个Init函数,为了在进一步说明传参的使用.实际上赋值按照需要放在主函数就行. (使用strcpy函数需要添加头文件string.h) #i

  • 如何用python实现结构体数组

    目录 python结构体数组 在NumPy中可以如下定义 内存对齐 python自定义结构体 具体方法如下 python结构体数组 在C语言中我们可以通过struct关键字定义结构类型,结构中的字段占据连续的内存空间,每个结构体占用的内存大小都相同,因此可以很容易地定义结构数组. 和C语言一样,在NumPy中也很容易对这种结构数组进行操作. 只要NumPy中的结构定义和C语言中的定义相同,NumPy就可以很方便地读取C语言的结构数组的二进制数据,转换为NumPy的结构数组. 假设我们需要定义一个

  • 详解C++中的指针结构体数组以及指向结构体变量的指针

    C++结构体数组 一个结构体变量中可以存放一组数据(如一个学生的学号.姓名.成绩等数据).如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组.结构体数组与以前介绍过的数值型数组的不同之处在于:每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项. 定义结构体数组和定义结构体变量的方法相仿,定义结构体数组时只需声明其为数组即可.如: struct Student //声明结构体类型Student { int num; char name[20]; char sex; i

  • C语言结构体数组的定义和使用详解

    目录 介绍 结构体数组定义时初始化 补充 介绍 一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗? 很明显不可能,这时就要使用数组.结构体中也有数组,称为结构体数组.它与前面讲的数值型数组几乎是一模一样的,只不过需要注意的是,结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体中所有的成员项. 定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组.或者说同前面介绍的普通数组

  • C语言中使用qsort函数对自定义结构体数组进行排序

    目录 使用qsort函数对自定义结构体数组进行排序 结构体 排序函数 总体代码 C语言 qsort()函数详解 1.qsort概念介绍 2.qsort()函数实现(循序渐进式讲解) 3.小结 使用qsort函数对自定义结构体数组进行排序 qsort进行排序的数组存储的不能是结构体的指针,需要是结构体本身. 结构体 struct student{     char* id;     int mark; }arr[4], test0={"0001",80}, test1={"00

  • C语言 结构体数组详解及示例代码

    所谓结构体数组,是指数组中的每个元素都是一个结构体.在实际应用中,结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生.一个车间的职工等. 定义结构体数组和定义结构体变量的方式类似,请看下面的例子: struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 }class[5]; 表示一个班级有5个学生. 结构体数组在定义的同时也可以初始化,例如: str

  • C#调用C++DLL传递结构体数组的终极解决方案

    C#调用C++DLL传递结构体数组的终极解决方案 在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了.但是当传递的是结构体.结构体数组或者结构体指针的时候,就会发现C#上没有类型可以对应.这时怎么办,第一反应是C#也定义结构体,然后当成参数传弟.然而,当我们定义完一个结构体后想传递参数进去时,会抛异常,或者是传入了结构体,但是返回值却不是我们想要的,经过调试跟踪后发现,那些值压根没有改变过,代码如下. [DllImport(

  • C++结构体数组详细解析

    1.定义结构体数组 和定义结构体变量类似,定义结构体数组时只需声明其为数组即可.如: 复制代码 代码如下: struct Student{     int num;     char name[20];     char sex[5];     int age;     float score;     char addr[30];};Student stu[3]; //定义Student类型的数组stu 2.结构体数组的应用举例 题目:对候选人的票的统计程序. 设有3个候选人,最终只能有一个当

  • C语言利用结构体数组实现学生成绩管理系统

    要求: 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).定义结构体类型描述学生信息,每个学生信息包括:学号.姓名.多门课的成绩.总成绩和平均成绩.用结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统. (1) 录入每个学生的学号.姓名和各科考试成绩. (2) 计算每门课程的总分和平均分. (3) 计算每个学生的总分和平均分. (4) 按每个学生的总分由高到低排出名次表. (5) 按学号由小到大排出成绩表. (6) 按姓名的字典顺序排出成

随机推荐