在 Go 语言中,可以使用标准库 encoding/json
来输出 JSON 数据。以下是一个简单的示例:
1. 结构体转 JSON
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
p := Person{Name: "Alice", Age: 25}
// 将结构体转为 JSON(字节切片)
jsonData, err := json.Marshal(p)
if err != nil {
fmt.Println("JSON编码错误:", err)
return
}
fmt.Println(string(jsonData)) // {"name":"Alice","age":25}
}
2. 格式化输出(缩进)
使用 json.MarshalIndent
可以生成带缩进的 JSON:
jsonData, err := json.MarshalIndent(p, "", " ") // 四个空格缩进
if err != nil {
fmt.Println("JSON编码错误:", err)
return
}
fmt.Println(string(jsonData))
输出:
{
"name": "Alice",
"age": 25
}
3. Map 转 JSON
data := map[string]interface{}{
"name": "Bob",
"age": 30,
}
jsonData, _ := json.Marshal(data)
fmt.Println(string(jsonData)) // {"age":30,"name":"Bob"}
4. 直接输出到 HTTP 响应
在 Web 开发中,可以直接用 json.NewEncoder
:
package main
import (
"encoding/json"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
p := Person{Name: "Alice", Age: 25}
w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode(p) // 自动写入HTTP响应
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
注意事项
- 字段标签:结构体的
`json:"field_name"`
标签可以自定义 JSON key。 - 忽略空字段:添加
`json:"field,omitempty"`
,空值不会出现在 JSON 中。 - 性能:对于频繁操作,建议复用
json.Encoder
/json.Decoder
。
如果需要更复杂的处理(如时间格式、自定义序列化),可以实现 json.Marshaler
/Unmarshaler
接口。
内容由零声教学AI助手提供,问题来源于学员提问