把一个 JSON 字符串转为一个 go struct 有两种方式:
用 json.Unmarshal
1
2
3
4
data, err := ioutil.ReadAll(resp.Body)
if err == nil && data != nil {
err = json.Unmarshal(data, value)
}
用 json.NewDecoder.Decode
1
err = json.NewDecoder(resp.Body).Decode(value)
选择那种方式,取决于自己的字符串来源:
- 当来自
io.Reader
stream 时就选用json.Decoder
- JSON 数据本来就在内存里,就选用
json.Unmarshal
下面是两种方式的使用示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main
import (
"encoding/json"
"fmt"
"strings"
)
func main() {
const jsonStream = `{"Name": "Ed", "Text": "Knock knock."}`
type Message struct {
Name, Text string
}
var m Message
// 用json.NewDecoder
dec := json.NewDecoder(strings.NewReader(jsonStream))
dec.Decode(&m)
fmt.Printf("%s: %s\n", m.Name, m.Text)
// 用 json.Unmarshal
json.Unmarshal([]byte(jsonStream), &m)
fmt.Printf("%s: %s\n", m.Name, m.Text)
fmt.Println("done")
}
运行输出:
1
2
3
Ed: Knock knock.
Ed: Knock knock.
done
本文网址: https://golangnote.com/topic/82.html 转摘请注明来源