编码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
- 多线程:通道思路
- 多线程爬虫:快代理