什么是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数据并输出。