最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

json转golang结构

来源:博客园


(相关资料图)

在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 mainimport (    "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/

关键词: 数据结构 我们需要 电子邮件