zoukankan      html  css  js  c++  java
  • golang学习笔记 生成JSON及解析JSON 清明

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

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

    1.JSON名称/值对

    "name" : "value"
    

      

    2.JSON值
    可以是:

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

      

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

    { "age":30 }
    

      

    JSON对象
    JSON 对象在大括号({})中书写:
    对象可以包含多个名称/值对:

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

    JSON数组
    JSON 数组在中括号中书写:
    数组可包含多个对象

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

      

    1. JSON布尔值
    { "flag":true }
    

      

    1. JSON null
    { "runoob":null }
    

      

    Json解析到结构体

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    )
    
    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)
    }
    

      输出:

    {[{Guangzhou_Base 127.0.0.1} {Beijing_Base 127.0.0.2}]}

    Guangzhou_Base

    示例二:

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    )
    
    type Server struct {
    	ServerName string `json:"serverName"`
    	ServerIP   string `json:"serverIP"`
    }
    type Serverslice struct {
    	Servers []Server `json:"servers"`
    }
    
    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)
    
    	s.Servers[0].ServerIP = "192.168.6.4"
    
    	data, err := json.Marshal(s)
    	if err != nil {
    		fmt.Println(err)
    		return
    	} else {
    		fmt.Println(string(data))
    	}
    }
    

      输出:

    {[{Guangzhou_Base 127.0.0.1} {Beijing_Base 127.0.0.2}]}

    Guangzhou_Base

    {"servers":[{"serverName":"Guangzhou_Base","serverIP":"192.168.6.4"},{"serverName":"Beijing_Base","serverIP":"127.0.0.2"}]}

    二、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]
    
    IP : 127.0.0.1
    
    name : SKY
    

      

    生成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: "Shenzhen_Base", ServerIP: "127.0.0.2"})
    	s.Servers = append(s.Servers, Server{ServerName: "Beijing_Base", ServerIP: ""})
    	b, err := json.Marshal(s)
    	if err != nil {
    		fmt.Println("JSON ERR:", err)
    	}
    	fmt.Println(string(b))
    }
    

      输出:

    {"servers":[{"serverName":"\"Guangzhou_Base\"","serverIP":"127.0.0.1"},{"serverName":"\"Shenzhen_Base\"","serverIP":"127.0.0.2"},{"serverName":"\"Beijing_Base\""}]}
    

      

  • 相关阅读:
    10 Iterable之遍历Map、Set、Array
    9 Map和Set
    8 循环
    5 字符串
    6 数组
    4 数据类型
    2 变量
    实现简单的邮件收发器(十二)
    10.19 初识django
    10.18 数据库之索引优化方案
  • 原文地址:https://www.cnblogs.com/saryli/p/15396167.html
Copyright © 2011-2022 走看看