map转化为json
package main
import (
"encoding/json"
"log"
"fmt"
)
func main() {
user := make(map[string]string)
user["username"]="kongyixueyuan"
user["address"]="北京"
jsonStr, err := json.Marshal(user)
if err!=nil{
log.Fatal(err)
}
fmt.Printf("%s",jsonStr)
}array转化为json
package main
import (
"encoding/json"
"log"
"fmt"
)
func main() {
personArr := [3]string{"小李","王二狗","老毕"}
jsonStr, err := json.Marshal(personArr)
if err!=nil{
log.Fatal()
}
fmt.Printf("%s\n",jsonStr)
}
[3]string改为[3]interface{}也可以转换成功
package main
import (
"encoding/json"
"log"
"fmt"
)
func main() {
personArr := [3]interface{}{"小李","王二狗","老毕"}
jsonStr, err := json.Marshal(personArr)
if err!=nil{
log.Fatal()
}
fmt.Printf("%s\n",jsonStr)
}struct转json
package main
import (
"fmt"
"encoding/json"
"log"
)
type Person struct {
UserName string
Age int
}
func main() {
str:=Person{"王二狗",30}
jsonStr, err := json.Marshal(str)
if err!=nil{
log.Fatal(err)
}
fmt.Println(string(jsonStr))
}
注意,结构体属性必须首字母大字,否则转化不了
type Person struct {
UserName string `json:"aaa"`
Age int `json:"bbb"`
}结构体属性名可以设置别名 只需要在属性类型后输入'json:"别名"' 即可
输出结果:{"aaa":"王二狗","bbb":30}
如果哪个结构体属性不想显示了。可以用'json:"-"'
type Person struct {
UserName string `json:"aaa"`
Age int `json:"-"`
}输出结果:{"aaa":"王二狗"}
以后开发也习惯把所有结构体首字母大写。
嵌套结构体转换
package main
import (
"fmt"
"encoding/json"
"log"
)
type Address struct {
Province string
City string
Number int
}
type Person struct {
UserName string `json:"aaa"`
Age int `json:"-"`
Addrs Address
}
func main() {
str:=Person{"王二狗",30,Address{"北京","海淀区",1803}}
jsonStr, err := json.Marshal(str)
if err!=nil{
log.Fatal(err)
}
fmt.Println(string(jsonStr))
}打印结果:
{"aaa":"王二狗","Addrs":{"Province":"北京","City":"海淀区","Number":1803}} 如果Address字符有名字是父子关系
如果把名字删除就变成兄弟关系了
type Person struct {
UserName string `json:"aaa"`
Age int `json:"-"`
Address
}输出结果:
{"aaa":"王二狗","Province":"北京","City":"海淀区","Number":1803}
把json字符串格式化,用+号去填写,不足的用-号填写
package main
import (
"fmt"
"encoding/json"
"log"
)
type Address struct {
Province string
City string
Number int
}
type Person struct {
UserName string `json:"aaa"`
Age int `json:"-"`
Address
}
func main() {
str := Person{"王二狗", 30, Address{"北京", "海淀区", 1803}}
jsonStr, err := json.Marshal(str)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(jsonStr))
jsonStr2, err := json.MarshalIndent(str, "+", "-")
fmt.Println(string(jsonStr2))
}输出结果:
{
+-"aaa": "王二狗",
+-"Province": "北京",
+-"City": "海淀区",
+-"Number": 1803
+}
这个挺有用,就是如果从服务器获取的json格式很乱,没法看。我们就可以用这个方法格式化成好看些。
将json转换成map
package main
import (
"encoding/json"
"fmt"
)
func main() {
str:="{\"address\":\"北京\",\"username\":\"kongyixueyuan\"}"
myMap:=make(map[string]string)
json.Unmarshal([]byte(str),&myMap)
fmt.Println(myMap)
}输出:
map[address:北京 username:kongyixueyuan]