目录
  • 一、JSON解析到结构体
    • 1.JSON名称/值对
    • 2.JSON值
    • 3.JSON数据
    • 4.JSON对象
    • 5.JSON数组
    • 6.JSON布尔值
    • 7.JSON null
  • 二、JSON转map
    • 三、生成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))
      }

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

      声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。