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""}]}