标签:error 解码 参数 %s 返回 lse 字段 hal fun
json 编码
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
person := Person{"ruby", 24}
b, err := json.Marshal(&person)
if err == nil {
fmt.Printf("%s\n", b)
} else {
// 错误处理
}
}
关键方法 json.Marshal:
func Marshal(v interface{}) ([]byte, error)
这个方法返回的结果是一个字节数组,如果需要转字符串,可以 string(xxx),如:
fmt.Println(string(b))
json 解码
package main
import (
"encoding/json"
"strings"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
// 需要解码的 json 字符串
str := `
{"name":"ruby","age":24}
`
// json decoder 对象, 有个 Decode 方法, 接受一个 struct 参数
decoder := json.NewDecoder(strings.NewReader(str))
var person Person
err := decoder.Decode(&person)
if err == nil {
fmt.Println(person.Name)
fmt.Println(person.Age)
}
}
写成一行就是(str 是需要解码的字符串,v 是结构体变量,需要解码成什么 struct 就定义什么 struct 变量):
json.NewDecoder(strings.NewReader(str)).Decode(v)
常见问题:
1、为什么我定义了一个 struct,但是使用 json.Marshal 方法编码之后返回的是空的 byte[] ?
可能原因:struct 里面使用了小写的的字段名,如
type Person struct {
name string
age int
}
需要把 字段名转为 驼峰命名,如果需要编码之后的字段名是小写的,可以给 struct 加个 tag,如上面的例子那样
标签:error 解码 参数 %s 返回 lse 字段 hal fun
原文地址:https://www.cnblogs.com/eleven24/p/9192481.html