golang生成JSON以及解析JSON

2022-08-30 17:55:57
目录
一、JSON解析到结构体1.JSON名称/值对2.JSON值3.JSON数据4.JSON对象5.JSON数组6.JSON布尔值7.JSON null二、JSON转map三、生成JSON

一、JSON解析到结构体

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

JSON>

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

    1.JSON名称/值对

    "name" : "value"

    2.JSON值

    可以是:

      数字(整数或浮点数)字符串(在双引号中)逻辑值(true>数组(在中括号中)对象(在大括号中)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>
      { "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))
      }

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持易采站长站。