1. Golang

Golang JSON数据处理

一·与结构体类型互转

1.decode

encoding/json包下函数Unmarshal可以将json解码为struct

Unmashal时,会自动匹配对应的变量名进行赋值,大小写不敏感(前提是struct中的变量首字母大写)

struct中变量首字母一定要大写!!!!!!!!!!!!!

func Unmarshal(data []byte, v interface{}) error
package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Message  string
	Username string
}

func main() {

	var user User
	str := `{"message":"success","username":"Michael Jiang"}`
	json.Unmarshal([]byte(str), &user)
	fmt.Println(user)
}

2·encode

Mashal时,结构体的成员变量名将会直接作为JSON Object的key打包成JSON(前提是struct中的变量首字母大写)

func Marshal(v interface{}) ([]byte, error)
注意有error可能
package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Message  string
	Username string
}

func main() {

	var user = User{"ok", "Lijie"}
	j, _ := json.Marshal(&user)
	fmt.Println(string(j))
}

二.与map之间互转

只要将 v interface{} 换成map类型即可

// main
package main

import (
	"encoding/json"
	"fmt"
)

func decode() {
	var mp map[string]string
	mp = make(map[string]string)
	str := `{"message":"success","username":"Michael Jiang"}`
	json.Unmarshal([]byte(str), &mp)
	fmt.Println(mp)
	fmt.Println(mp["username"])
	fmt.Println(mp["message"])
}

func encode() {
	var mp map[string]string
	mp = make(map[string]string)
	mp["message"] = "success"
	mp["username"] = "Michael Jiang"
	j, _ := json.Marshal(mp)
	fmt.Println(string(j))
}
func main() {
	encode()
	decode()
}

 

注意:map需要先定义,再make 最后使用!

至于JSON和其他类型的转换与上述过程大同小异,这里就不演示了。