mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-11-13 09:16:10 +08:00
12.7-12.12
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# 12.9 Json 数据格式
|
||||
# 12.9 JSON 数据格式
|
||||
|
||||
数据结构要在网络中传输或保存到文件,就必须对其编码和解码;目前存在很多编码格式:JSON,XML,gob,Google 缓冲协议等等。Go 语言支持所有这些编码格式;在后面的章节,我们将讨论前三种格式。
|
||||
|
||||
@@ -34,7 +34,6 @@ Go 语言的 json 包可以让你在程序中方便的读取和写入 JSON 数
|
||||
|
||||
我们将在下面的例子里使用 json 包,并使用练习 10.1 vcard.go 中一个简化版本的 Address 和 VCard 结构(为了简单起见,我们忽略了很多错误处理,不过在实际应用中你必须要合理的处理这些错误,参阅 13 章)
|
||||
|
||||
|
||||
示例 12.16 [json.go](examples/chapter_12/json.go):
|
||||
|
||||
```go
|
||||
@@ -78,7 +77,6 @@ func main() {
|
||||
log.Println("Error in encoding json")
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
`json.Marshal()` 的函数签名是 `func Marshal(v interface{}) ([]byte, error)`,下面是数据编码后的 JSON 文本(实际上是一个 []bytes):
|
||||
@@ -185,7 +183,7 @@ for k, v := range m {
|
||||
|
||||
通过这种方式,你可以处理未知的 JSON 数据,同时可以确保类型安全。
|
||||
|
||||
### 解码数据到结构:
|
||||
### 解码数据到结构
|
||||
|
||||
如果我们事先知道 JSON 数据,我们可以定义一个适当的结构并对 JSON 数据反序列化。下面的例子中,我们将定义:
|
||||
|
||||
@@ -208,6 +206,7 @@ err := json.Unmarshal(b, &m)
|
||||
程序实际上是分配了一个新的切片。这是一个典型的反序列化引用类型(指针、切片和 map)的例子。
|
||||
|
||||
### 编码和解码流
|
||||
|
||||
json 包提供 Decoder 和 Encoder 类型来支持常用 JSON 数据流读写。NewDecoder 和 NewEncoder 函数分别封装了 io.Reader 和 io.Writer 接口。
|
||||
|
||||
```go
|
||||
|
||||
Reference in New Issue
Block a user