編碼JSON
>其他數據轉json
> func Marshal(v interface{}) ([]byte, error)
> v interface{} 需要轉換的映射或者結構體
> []byte 輸出字節需要根據類型轉換輸出比如 string()
>格式化josn
>func MarshalIndent(v interface{}, perfix, indent string) ([]byte, error)
> v interface{} 需要轉換的映射或者結構體
> []byte 輸出字節需要根據類型轉換輸出比如 string()
> perfix 前綴 使用默認
> indent string 前綴 ,一個縮進" "
```
package main
import (
"encoding/json"
"fmt"
)
func main() {
// 創建一個 映射map
var m = make(map[string]interface{}, 4)
m["name"] = "Pony"
m["age"] = 18
m["height"] = 180
m["data"] = []string{"Go", "Python", "PHP"}
// 打印映射
fmt.Println(m)
//轉json
result, _ := json.Marshal(m)
//打印轉的json 要使用string()
fmt.Println(string(result))
//格式化 json
resultfmt, _ := json.MarshalIndent(m, "", " ")
//打印轉的json 要使用string()
fmt.Println(string(resultfmt))
}
結果:
map[age:18 data:[Go Python PHP] height:180 name:Pony]
{"age":18,"data":["Go","Python","PHP"],"height":180,"name":"Pony"}
{
"age": 18,
"data": [
"Go",
"Python",
"PHP"
],
"height": 180,
"name": "Pony"
}
```
### 使用結構體快速編碼
```
package main
import (
"encoding/json"
"fmt"
)
// 創建一個結構體 里面是json的鍵位
type Per struct {
// Name屬性的key值轉為 name
Name string `json:"name"`
Age int `json:"age"`
Height int `json:"height"`
Data []string `json:"data"`
// 這種數組 或者切片 類型前加[]
}
func main() {
// 定義一個結構體變量
per := Per{"Pony", 18, 170, []string{"Go", "Python", "PHP"}}
//轉成json 輸出
//result, err := json.Marshal(per)
result, err := json.MarshalIndent(per, "", " ")
fmt.Println(string(result))
if err != nil {
fmt.Println(err)
}
}
結果:
{
"name": "Pony",
"age": 18,
"height": 170,
"data": [
"Go",
"Python",
"PHP"
]
}
```
### 解碼json
> func Unmarshal(data []byte, v interface{}) error
> data []byte 這塊[]byte(json字符串)
> v interface{} 指針類型
```
package main
import (
"encoding/json"
"fmt"
)
// 創建一個結構體 里面是json的鍵位
type Per struct {
Name string `json:"name"`
Age int `json:"age"`
Height int `json:"height"`
Data []string `json:"data"`
// 這種數組 或者切片 類型前加[]
}
func main() {
// `` 通常用這個符號直接輸出
jsonstr := `{
"name": "Pony",
"age": 18,
"height": 170,
"data": [
"Go",
"Python",
"PHP"
]
}`
// 實例化結構體
// per := new(Per) 返回指針類型
var per Per // 返回映射
err := json.Unmarshal([]byte(jsonstr), &per)
if err != nil {
fmt.Println(err)
}
fmt.Println(per)
}
結果:
{Pony 18 170 [Go Python PHP]}
```
- 安裝開發環境
- 安裝開發環境
- 安裝詳細教程
- 引入包
- Go語言基礎
- 基本變量與數據類型
- 變量
- 數據類型
- 指針
- 字符串
- 代碼總結
- 常量與運算符
- 常量
- 運算符
- 流程控制
- if判斷
- for循環
- switch分支
- goto跳轉
- 斐波那契數列
- Go語言內置容器
- 數組
- 切片
- 映射
- 函數
- 函數(上)
- 函數(中)
- 函數(下)
- 小節
- 包管理
- 結構體
- 結構體(上)
- 結構體(中)
- 結構體(下)
- 小節
- 錯誤處理
- 錯誤處理
- 宕機
- 錯誤應用
- 小節
- 文件操作
- 獲取目錄
- 創建和刪除目錄
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 處理JSON文件
- 接口與類型
- 接口的創建與實現
- 接口賦值
- 接口嵌入
- 空接口
- 類型斷言(1)
- 類型斷言(2)
- 小節
- 并發與通道
- goroutine協程
- runtime包
- 通道channel
- 單向通道channel
- select
- 線程同步
- 多線程的深入學習
- http編程
- http簡介
- Client和Request
- get請求
- post請求
- 模塊函數方法
- 模塊
- fmt庫,模塊
- 項目練習
- 爬蟲:高三網
- 爬蟲:快代理
- 爬蟲:快代理2
- 多線程:通道思路
- 多線程爬蟲:快代理