json转golang结构
2023-04-18 15:16:52 时间
在Golang中,我们可以使用标准库中的encoding/json包来将JSON数据转换为结构体。本文将介绍如何使用该包将JSON数据转换为Golang结构体。
首先,让我们看一下JSON数据的格式。以下是一个示例JSON数据:
{ "name": "John", "age": 30, "email": "john@example.com", "address": { "street": "123 Main St", "city": "New York", "state": "NY", "zip": "10001" }, "phoneNumbers": [ { "type": "home", "number": "555-555-1234" }, { "type": "work", "number": "555-555-5678" } ] }
该JSON数据表示一个人的基本信息,包括姓名,年龄,电子邮件,地址和电话号码。现在我们将使用Golang将其转换为结构体。
首先,我们需要定义一个与JSON数据结构匹配的结构体。以下是一个示例结构体:
type Person struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email"` Address Address `json:"address"` PhoneNumbers []PhoneNumber `json:"phoneNumbers"` } type Address struct { Street string `json:"street"` City string `json:"city"` State string `json:"state"` Zip string `json:"zip"` } type PhoneNumber struct { Type string `json:"type"` Number string `json:"number"` }
在这个结构体中,我们定义了三个嵌套的结构体:Address和PhoneNumber。我们还为每个字段定义了一个JSON标记,以指定JSON数据中该字段的名称。
接下来,我们需要将JSON数据解析为我们的结构体。我们可以使用json.Unmarshal函数来执行此操作。以下是示例代码:
package main import ( "encoding/json" "fmt" ) func main() { jsonStr := ` { "name": "John", "age": 30, "email": "john@example.com", "address": { "street": "123 Main St", "city": "New York", "state": "NY", "zip": "10001" }, "phoneNumbers": [ { "type": "home", "number": "555-555-1234" }, { "type": "work", "number": "555-555-5678" } ] } ` var person Person err := json.Unmarshal([]byte(jsonStr), &person) if err != nil { fmt.Println("Error parsing JSON:", err) } else { fmt.Println("Person name:", person.Name) fmt.Println("Person age:", person.Age) fmt.Println("Person email:", person.Email) fmt.Println("Person address street:", person.Address.Street) fmt.Println("Person address city:", person.Address.City) fmt.Println("Person address state:", person.Address.State) fmt.Println("Person address zip:", person.Address.Zip) for _, phone := range person.PhoneNumbers { fmt.Println("Person phone type:", phone.Type) fmt.Println("Person phone number:", phone.Number) } } }
在这个代码中,我们首先定义了一个包含JSON数据的字符串。然后我们定义了一个空的Person结构体,并使用json.Unmarshal函数将JSON数据解析为该结构体。如果解析出错,则会打印错误消息;否则,我们将输出Person结构体中的各个字段。
在这个示例中,我们使用了嵌套结构体和切片来表示复杂的JSON数据结构。我们还使用了JSON标记来指定每个字段在JSON数据中的名称。这样,我们就可以使用Golang的encoding/json包来方便地将JSON数据转换为Golang结构体。
golang结构体可以通过在线工具直接生成:
https://tool.hiofd.com/json-to-go/
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击