## 一、結構體轉JSON
~~~
package main
import (
"fmt"
"encoding/json"
)
// 結構體
type User3 struct {
Name string
Age int
}
func main() {
// 一、格式化方式一
u1 := User3{"aaa",18}
b,err:=json.Marshal(u1)
if err!=nil{
fmt.Println("json err",err)
}
fmt.Println(string(b))
// 二、格式化方式二
// 第二個參數。每行的前綴
// 第三個參數:每行的縮進格式
b,err=json.MarshalIndent(u1,""," ")
if err!=nil{
fmt.Println("json err",err)
}
fmt.Println(string(b))
}
~~~
運行結果:
{"Name":"aaa","Age":18}
{
"Name": "aaa",
"Age": 18
}
## 二、為結構體字段取別名
~~~
package main
import (
"fmt"
"encoding/json"
)
// 結構體
type User3 struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
// 一、格式化方式一
u1 := User3{"aaa",18}
b,err:=json.Marshal(u1)
if err!=nil{
fmt.Println("json err",err)
}
fmt.Println(string(b))
// 二、格式化方式二
// 第二個參數。每行的前綴
// 第三個參數:每行的縮進格式
b,err=json.MarshalIndent(u1,""," ")
if err!=nil{
fmt.Println("json err",err)
}
fmt.Println(string(b))
}
~~~
運行結果:
{"name":"aaa","age":18}
{
"name": "aaa",
"age": 18
}
## 三、map轉化成Json
~~~
package main
import (
"fmt"
"encoding/json"
)
// 結構體
type User3 struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
maps := make(map[string]interface{})
maps["name"] = "aaa"
maps["age"] = 15
maps["sex"] = "男"
json,err := json.Marshal(maps)
if err!=nil{
fmt.Println("json err",err)
}
fmt.Println(string(json))
}
~~~
運行結果:
{"age":15,"name":"aaa","sex":"男"}
## 四、解碼(解析到結構體)
~~~
package main
import (
"fmt"
"encoding/json"
)
// 結構體
type User3 struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
//創建json數據
b := []byte(`{"age":15,"name":"aaa"}`)
// 申明結構體
var u User3
//json解析到結構體
err :=json.Unmarshal(b,&u)
if err!=nil{
fmt.Println("json err",err)
}
fmt.Println(u)
}
~~~
運行結果:
{aaa 15}
## 五、解碼(解析到interface)
~~~
package main
import (
"encoding/json"
"fmt"
)
func main() {
//1.創建json數據
b := []byte(`{"Name":"zhangsan","Hobby":"女"}`)
//2.聲明空interface
var i interface{}
//3.解析
err := json.Unmarshal(b, &i)
if err != nil {
fmt.Println(err)
}
//默認轉成了map
fmt.Println(i)
//4.解析到interface的json可以判斷類型
m := i.(map[string]interface{})
for k, v := range m {
switch vv := v.(type) {
case string:
fmt.Println(k, "是string類型", vv)
case int:
fmt.Println(k, "是int類型", vv)
default:
fmt.Println("xxx")
}
}
}
~~~
- 一、數組
- 二、切片
- 三、copy
- 四、MAP
- 五、結構體
- 六、結構體參數
- 七、面向”對象“
- 1、匿名字段
- 2、方法
- 3、包和封裝
- 4、接口
- 5、異常處理
- 八、Json
- 九、文件操作
- 1、寫文件
- 2、讀取文件內容
- 3、拷貝文件
- 十、反射
- 1、查看類型,字段和方法
- 2、查看匿名字段
- 3、修改基本類型的值
- 4、修改結構體的值
- 5、調用方法
- 十一、并發編程
- 1、并行和并發
- 2、協程
- 3、runtime包
- 5、channel的使用
- 6、close
- 7、定時器
- 8、select
- 9、協程同步鎖
- 十二、socket編程
- 十三、Http編程
- 十四、并發爬蟲和數據處理
- 1、簡易爬蟲實例
- 2、并發爬取圖片
- 3、讀文件中的數據
- 4、數據清洗
- 其他
- 1、推薦文章