什么是json
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。由于json是一种文本格式,所以可以轻松地在网络上传输和存储。
使用golang读取json数据
在golang中,可以使用标准库中的enc/json包来处理json数据。该包提供了一系列函数来编解码json格式的数据。下面是一个示例程序,演示如何读取json数据:
package main
import (
"fmt"
"encoding/json"
)
type Person struct {
Name string
Age int
}
func main() {
jsonData := []byte(`{"name":"张三","age":18}`)
var p Person
err := json.Unmarshal(jsonData, &p)
if err != nil {
fmt.Println("解析json数据失败:", err)
return
}
fmt.Println(p.Name)
fmt.Println(p.Age)
}
代码解释:
- 定义一个结构体Person,用来保存从json数据中读取出来的数据;
- 定义一个json数据,由于json数据是一种文本格式,所以需要将其转换成[]byte类型;
- 使用json.Unmarshal函数将json数据解码到结构体p中;
- 输出p中的字段。
使用golang写入json数据
在golang中,可以使用标准库中的enc/json包来处理json数据。该包提供了一系列函数来编解码json格式的数据。下面是一个示例程序,演示如何写入json数据:
package main
import (
"fmt"
"encoding/json"
)
type Person struct {
Name string
Age int
}
func main() {
p := Person{
Name: "张三",
Age: 18,
}
jsonData, err := json.Marshal(p)
if err != nil {
fmt.Println("生成json数据失败:", err)
return
}
fmt.Println(string(jsonData))
}
代码解释:
- 定义一个结构体Person,用来保存将要被编码为json的数据;
- 创建一个Person类型的实例p并赋值;
- 使用json.Marshal函数将结构体p编码为json数据;
- 将编码后的json数据转换成字符串并输出。
处理复杂json数据
在实际开发中,json数据有时比较复杂,不止包含基本类型,还包含嵌套的复杂类型。对于这种情况,golang的enc/json包提供了类似于其他语言中的Map类型的map[string]interface{}类型来处理复杂的json数据。
下面是一个示例程序,展示如何读写复杂的json数据:
package main
import (
"fmt"
"encoding/json"
)
type Person struct {
Name string
Age int
Parents []string
}
func main() {
jsonData := []byte(`{"name":"张三","age":18,"parents":["张父","张母"]}`)
var p map[string]interface{}
err := json.Unmarshal(jsonData, &p)
if err != nil {
fmt.Println("解析json数据失败:", err)
return
}
var person Person
person.Name = p["name"].(string)
person.Age = int(p["age"].(float64))
parents := p["parents"].([]interface{})
for _, v := range parents {
person.Parents = append(person.Parents, v.(string))
}
fmt.Println(person)
jsonData, err = json.Marshal(person)
if err != nil {
fmt.Println("生成json数据失败:", err)
return
}
fmt.Println(string(jsonData))
}
代码解释:
- 定义一个结构体Person,用来保存将要被编码为json的数据,其中parents是一个字符串类型的切片;
- 定义一个json数据,由于json数据是一种文本格式,所以需要将其转换成[]byte类型;
- 使用json.Unmarshal函数将json数据解码到map[string]interface类型的变量p中;
- 根据p中的数据构造Person类型的实例person;
- 将Person类型的实例person编码为json数据并输出。