ZBLOG

golang 输出json

在 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)
}

注意事项

  1. 字段标签:结构体的 `json:"field_name"` 标签可以自定义 JSON key。
  2. 忽略空字段:添加 `json:"field,omitempty"`,空值不会出现在 JSON 中。
  3. 性能:对于频繁操作,建议复用 json.Encoder/json.Decoder

如果需要更复杂的处理(如时间格式、自定义序列化),可以实现 json.Marshaler/Unmarshaler 接口。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23940

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?