生成JSON:
在golang中生成JSON非常简单,可以使用标准库中的encoding/json
包来实现。下面是一个示例代码:
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"` // json tag,用于指定json key的名称
Age int `json:"age"`
Gender string `json:"gender"`
}
func main() {
person := Person{
Name: "张三",
Age: 18,
Gender: "男",
}
jsonString, err := json.Marshal(person)
if err != nil {
fmt.Println("生成json失败!")
} else {
fmt.Println(string(jsonString))
}
}
在上面的代码中,我们定义了一个Person
结构体,该结构体的字段通过json
tag来指定生成的json key的名称。在main
函数中,我们创建了一个Person
类型的变量,并使用json.Marshal
函数将其转换为JSON字符串输出。
输出结果为:
{"name":"张三","age":18,"gender":"男"}
如果要将生成的JSON字符串进行格式化输出,可以使用json.MarshalIndent
函数,如下所示:
jsonString, err := json.MarshalIndent(person, "", " ")
上面的代码中,第一个参数为要转换成JSON字符串的对象,第二个参数为每一层缩进的字符串,第三个参数为使用的缩进字符串,本例中每一层使用两个空格缩进。
解析JSON:
在golang中解析JSON也非常简单,仍然可以使用标准库中的encoding/json
包来实现。下面是一个示例代码:
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Gender string `json:"gender"`
}
func main() {
jsonString := `{"name":"张三","age":18,"gender":"男"}`
var person Person
err := json.Unmarshal([]byte(jsonString), &person)
if err != nil {
fmt.Println("解析json失败!")
} else {
fmt.Println(person)
}
}
在上面的代码中,我们定义了一个与生成JSON示例中相同的Person
结构体。在main
函数中,我们创建了一个包含JSON数据的字符串,然后使用json.Unmarshal
函数将其转换为Person
类型的对象,并输出转换后得到的Person
对象。
输出结果为:
{张三 18 男}
如果JSON数据较大,我们可以使用json.Decoder
来逐个解析JSON数据中的每个JSON对象,而不是一次性将整个JSON数据解码为一个对象,从而提高解析JSON数据的效率。示例如下:
package main
import (
"encoding/json"
"fmt"
"strings"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
jsonString := `{"users":[{"name":"张三","age":18},{"name":"李四","age":20}]}`
decoder := json.NewDecoder(strings.NewReader(jsonString))
for {
var m map[string]interface{}
err := decoder.Decode(&m)
if err != nil {
break
}
for k, v := range m {
if k == "users" {
users := v.([]interface{})
for _, u := range users {
user := User{}
b, _ := json.Marshal(u)
json.Unmarshal(b, &user)
fmt.Println(user)
}
}
}
}
}
上面的代码中,我们定义了一个包含多个User
对象的JSON数据。我们使用json.NewDecoder
来创建一个json.Decoder
,然后使用decoder.Decode
方法逐个解析JSON数据中的每个JSON对象,最后将解析出来的JSON对象转换为User
对象,并输出转换后得到的User
对象。
输出结果为:
{张三 18}
{李四 20}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:golang生成JSON以及解析JSON - Python技术站