json转golang结构

打印 上一主题 下一主题

主题 679|帖子 679|积分 2037

在Golang中,我们可以使用标准库中的encoding/json包来将JSON数据转换为结构体。本文将介绍如何使用该包将JSON数据转换为Golang结构体。
首先,让我们看一下JSON数据的格式。以下是一个示例JSON数据:
  1. {
  2.   "name": "John",
  3.   "age": 30,
  4.   "email": "john@example.com",
  5.   "address": {
  6.     "street": "123 Main St",
  7.     "city": "New York",
  8.     "state": "NY",
  9.     "zip": "10001"
  10.   },
  11.   "phoneNumbers": [
  12.     {
  13.       "type": "home",
  14.       "number": "555-555-1234"
  15.     },
  16.     {
  17.       "type": "work",
  18.       "number": "555-555-5678"
  19.     }
  20.   ]
  21. }
复制代码
 
该JSON数据表示一个人的基本信息,包括姓名,年龄,电子邮件,地址和电话号码。现在我们将使用Golang将其转换为结构体。
首先,我们需要定义一个与JSON数据结构匹配的结构体。以下是一个示例结构体:
  1. type Person struct {
  2.     Name        string       `json:"name"`
  3.     Age         int          `json:"age"`
  4.     Email       string       `json:"email"`
  5.     Address     Address      `json:"address"`
  6.     PhoneNumbers []PhoneNumber `json:"phoneNumbers"`
  7. }
  8. type Address struct {
  9.     Street string `json:"street"`
  10.     City   string `json:"city"`
  11.     State  string `json:"state"`
  12.     Zip    string `json:"zip"`
  13. }
  14. type PhoneNumber struct {
  15.     Type   string `json:"type"`
  16.     Number string `json:"number"`
  17. }
复制代码
 
在这个结构体中,我们定义了三个嵌套的结构体:Address和PhoneNumber。我们还为每个字段定义了一个JSON标记,以指定JSON数据中该字段的名称。
接下来,我们需要将JSON数据解析为我们的结构体。我们可以使用json.Unmarshal函数来执行此操作。以下是示例代码:
  1. package main
  2. import (
  3.     "encoding/json"
  4.     "fmt"
  5. )
  6. func main() {
  7.     jsonStr := `
  8.         {
  9.             "name": "John",
  10.             "age": 30,
  11.             "email": "john@example.com",
  12.             "address": {
  13.                 "street": "123 Main St",
  14.                 "city": "New York",
  15.                 "state": "NY",
  16.                 "zip": "10001"
  17.             },
  18.             "phoneNumbers": [
  19.                 {
  20.                     "type": "home",
  21.                     "number": "555-555-1234"
  22.                 },
  23.                 {
  24.                     "type": "work",
  25.                     "number": "555-555-5678"
  26.                 }
  27.             ]
  28.         }
  29.     `
  30.     var person Person
  31.     err := json.Unmarshal([]byte(jsonStr), &person)
  32.     if err != nil {
  33.         fmt.Println("Error parsing JSON:", err)
  34.     } else {
  35.         fmt.Println("Person name:", person.Name)
  36.         fmt.Println("Person age:", person.Age)
  37.         fmt.Println("Person email:", person.Email)
  38.         fmt.Println("Person address street:", person.Address.Street)
  39.         fmt.Println("Person address city:", person.Address.City)
  40.         fmt.Println("Person address state:", person.Address.State)
  41.         fmt.Println("Person address zip:", person.Address.Zip)
  42.         for _, phone := range person.PhoneNumbers {
  43.             fmt.Println("Person phone type:", phone.Type)
  44.             fmt.Println("Person phone number:", phone.Number)
  45.         }
  46.     }
  47. }
复制代码
 
在这个代码中,我们首先定义了一个包含JSON数据的字符串。然后我们定义了一个空的Person结构体,并使用json.Unmarshal函数将JSON数据解析为该结构体。如果解析出错,则会打印错误消息;否则,我们将输出Person结构体中的各个字段。
在这个示例中,我们使用了嵌套结构体和切片来表示复杂的JSON数据结构。我们还使用了JSON标记来指定每个字段在JSON数据中的名称。这样,我们就可以使用Golang的encoding/json包来方便地将JSON数据转换为Golang结构体。
 
  1. golang结构体可以通过在线工具直接生成: <br><a title="在线json生成golang结构定义代码工具" href="https://tool.hiofd.com/json-to-go/" target="_blank" rel="noopener">https://tool.hiofd.com/json-to-go/</a>
复制代码
 
   
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表