json转golang结构
在Golang中,我们可以使用标准库中的encoding/json包来将JSON数据转换为结构体。本文将介绍如何使用该包将JSON数据转换为Golang结构体。
首先,让我们看一下JSON数据的格式。以下是一个示例JSON数据:
{ "name": "John", "age": 30, "email": "[email protected]", "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": "[email protected]", "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/