在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)
        }
    }
}

 

golang结构体可以通过在线工具直接生成: 
https://tool.hiofd.com/json-to-go/