首页 > 其他分享 >json转golang结构

json转golang结构

时间:2023-03-05 18:12:07浏览次数:53  
标签:person fmt JSON golang Person json Println 结构

在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/

 

     

标签:person,fmt,JSON,golang,Person,json,Println,结构
From: https://www.cnblogs.com/kingchn/p/17181169.html

相关文章

  • 02 Golang 基础简介
    一、标识符标识符是指定义的具有特殊意义的词,例如变量、常量、函数名等等,任何一门语言中都对自己的标识符有特殊定义的规则。在Go语言中,标识符由字母数字和下划线组成,并......
  • C#实现类似Lua的table的数据结构
    设计意义Lua的table是使用键值对的方式存取,在CSharp中对应的是字典。但是字典会判断键存在与否,而且使用Add和Remove方法来实现存取改,长期来说确实不方便,使代码看上去不是......
  • [Java基础] 流程控制结构
    流程控制结构if-elseprivatestaticStringcheckHeartBeats(intheatBeats){if(heatBeats>100){return"toofast";}elseif(he......
  • python 循环结构 for循环 输出1到100的数值
    """for循环语法:foriinrange(起点包含,终点不包含):要重复做的事情"""foriinrange(1,101):print(i)......
  • python 循环结构 for循环遍历列表 输出所有列表成员
    """for临时变量in列表:处理临时变量"""li=["刘备","关羽","张飞"]print("准备欢迎每个同学")fornameinli:print(name,"你好")......
  • python 分支结构 循环结构 while循环 输出3次pyhui
    """定义计数器while条件:需要重复做的事情计数器变化"""#计数器i=0#循环whilei<3:print("pyhui")i+=1#结束print("over")......
  • 常用数据结构和算法总结
    线性表:单链表双向链表循环链表栈队列递归字符串数组树二叉树哈夫曼树:又称为最优树,是一种带权路径长度最短的树平很二叉树B树......
  • 数组结构1 - 复杂度
    1. 如何衡量算法效率算法与程序的联系算法是解决一个问题所定义的计算步骤,这些计算步骤通过计算机语言描述编写成计算机源程序,源程序通过编译链接,最后生成可执行......
  • 剑指Offer36 -- 数据结构
    1.题目描述二叉搜索树与双向链表2.思路3.代码......
  • 软件设计与体系结构第一次分享
    1.单一职责原则:就是对于类来说,一个类应该只负责一项职责,规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分,也就是说,接口的职责并不是单一的,而是包含两个职责(......