golang生成JSON以及解析JSON

 更新时间:2022年08月30日 15:02:33   作者:wade3015  
这篇文章主要介绍了golang生成JSON以及解析JSON,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

一、JSON解析到结构体

在介绍这部分之前先简要介绍一下Json语法

JSON 语法是 JavaScript 语法的子集。JSON 语法是 JavaScript 对象表示法语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号保存对象
  • 中括号保存数组

1.JSON名称/值对

"name" : "value"

2.JSON值

可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在中括号中)
  • 对象(在大括号中)
  • null

3.JSON数据

JSON 数字可以是整型或者浮点型

{ "age":30 }

4.JSON对象

JSON 对象在大括号({})中书写:

对象可以包含多个名称/值对:

{
    "name": "runoob",
    "alexa": 10000,
    "sites": {
        "site1": "www.runoob.com",
        "site2": "m.runoob.com",
        "site3": "c.runoob.com"
    }
}

5.JSON数组

JSON 数组在中括号中书写:

数组可包含多个对象:

{
    "sites": [
        {
            "name": "菜鸟教程",
            "url": "www.runoob.com"
        },
        {
            "name": "google",
            "url": "www.google.com"
        },
        {
            "name": "微博",
            "url": "www.weibo.com"
        }
    ]
}

6.JSON布尔值

{ "flag":true }

7.JSON null

{ "runoob":null }

Json解析到结构体

//JSON解析到结构体
package main
import (
    "encoding/json"
    "fmt"
    "os"
)
type Server struct {
    ServerName string
    ServerIP   string
}
type Serverslice struct {
    Servers []Server
}
func main() {
    var s Serverslice
    str := `{"servers":
   [{"serverName":"Guangzhou_Base","serverIP":"127.0.0.1"},
   {"serverName":"Beijing_Base","serverIP":"127.0.0.2"}]}`
    err:=json.Unmarshal([]byte(str), &s)
    if err!=nil{
        fmt.Println(err)
    }
    fmt.Println(s)
    fmt.Println(s.Servers[0].ServerName)
}

二、JSON转map

package main  
import (
    "fmt"
    "encoding/json"
)
 
func main() {
 
    b := []byte(`{"IP": "127.0.0.1", "name": "SKY"}`)
 
    m := make(map[string]string)
 
    err := json.Unmarshal(b, &m)
    if err != nil {
 
        fmt.Println("Umarshal failed:", err)
        return
    } 
 
    fmt.Println("m:", m) 
    for k,v :=range m {
        fmt.Println(k, ":", v)
    }
}

输出结果:

m: map[IP:127.0.0.1 name:SKY]

name : SKY

IP : 127.0.0.1

三、生成JSON

package main
import (
    "encoding/json"
    "fmt"
)
type Server struct {
    ServerName string `json:"serverName,string"`
    ServerIP   string `json:"serverIP,omitempty"`
}
type Serverslice struct {
    Servers []Server `json:"servers"`
}
func main() {
    var s Serverslice
    s.Servers = append(s.Servers, Server{ServerName: "Guangzhou_Base", ServerIP: "127.0.0.1"})
    s.Servers = append(s.Servers, Server{ServerName: "Beijing_Base", ServerIP: "127.0.02"})
    b, err := json.Marshal(s)
    if err != nil {
        fmt.Println("JSON ERR:", err)
    }
    fmt.Println(string(b))
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Go语言操作redis用法实例

    Go语言操作redis用法实例

    这篇文章主要介绍了Go语言操作redis用法,实例分析了Go语言操作redis的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • Go语言map字典用法实例分析

    Go语言map字典用法实例分析

    这篇文章主要介绍了Go语言map字典用法,实例分析了map字典的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 一文帮你搞懂Go面试中常问的channel问题

    一文帮你搞懂Go面试中常问的channel问题

    channel是Golang面试时经常会问到的问题,所以这篇文章为大家整理了channel常考的一些问题以及回答,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • Go各时间字符串使用解析

    Go各时间字符串使用解析

    这篇文章主要介绍了Go各时间字符串使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Go实现Redis连接池方法

    Go实现Redis连接池方法

    为了更深入了解golang连接池的实现,自已又重写了一遍连接池。文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • golang监听文件变化的实例

    golang监听文件变化的实例

    这篇文章主要介绍了golang监听文件变化的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • golang1.21新特性全面讲解

    golang1.21新特性全面讲解

    经过了半年左右的开发,golang 1.21 最近正式发布了,这个版本中有不少重要的新特性和变更,尤其是在泛型相关的代码上,下面小编就来和大家好好唠唠吧
    2023-08-08
  • GoFrame框架数据校验之校验结果Error接口对象

    GoFrame框架数据校验之校验结果Error接口对象

    这篇文章主要为大家介绍了GoFrame框架数据校验之校验结果Error接口对象示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • golang判断两个事件是否存在冲突的方法示例

    golang判断两个事件是否存在冲突的方法示例

    这篇文章主要为大家详细介绍了golang判断两个事件是否存在冲突的方法示例,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • golang优先级队列的实现全过程

    golang优先级队列的实现全过程

    优先级队列是一种特殊队列,下面这篇文章主要给大家介绍了关于golang优先级队列的实现全过程,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12

最新评论