Golang中嵌套JSON结构体的处理与使用
Golang中嵌套JSON结构体的处理与使用 请参考 Go Playground - Go 编程语言
输出 2009/11/10 23:00:00 { “Name”: “AccountInfo”, “PolicyID”: “1”, “UpdatedTime”: “Tue, 10 Nov 2009 23:00:00 UTC”, “Elements”: { “Salutation”: “Mr.”, “FullName”: “Mak” } }
为什么我在根级别得到了时间戳? 我怎样才能用字符串常量(例如 “root”)替换它?
更多关于Golang中嵌套JSON结构体的处理与使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
4 回复
你能在这里发布你的代码吗?否则我们无法定位问题所在?
更多关于Golang中嵌套JSON结构体的处理与使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
请提供部分代码,特别是结构体定义和打印过程。
将:
log.Println(string(pageJson2))
替换为:
fmt.Println(string(pageJson2))
log 包会添加日期/时间格式。
在Golang中,日志包默认会在每条日志前添加时间戳。要解决这个问题,你可以自定义log.Logger的配置,或者使用JSON编码器直接输出结构体而不通过log包。
以下是两种解决方案:
方案1:使用自定义log.Logger(推荐)
package main
import (
"encoding/json"
"log"
"os"
)
type AccountInfo struct {
Name string `json:"Name"`
PolicyID string `json:"PolicyID"`
UpdatedTime string `json:"UpdatedTime"`
Elements map[string]interface{} `json:"Elements"`
}
func main() {
// 创建自定义logger,移除时间戳和前缀
logger := log.New(os.Stdout, "root ", 0)
account := AccountInfo{
Name: "AccountInfo",
PolicyID: "1",
UpdatedTime: "Tue, 10 Nov 2009 23:00:00 UTC",
Elements: map[string]interface{}{
"Salutation": "Mr.",
"FullName": "Mak",
},
}
jsonData, _ := json.MarshalIndent(account, "", " ")
logger.Println(string(jsonData))
}
方案2:直接使用json.MarshalIndent输出
package main
import (
"encoding/json"
"fmt"
)
type AccountInfo struct {
Name string `json:"Name"`
PolicyID string `json:"PolicyID"`
UpdatedTime string `json:"UpdatedTime"`
Elements map[string]interface{} `json:"Elements"`
}
func main() {
account := AccountInfo{
Name: "AccountInfo",
PolicyID: "1",
UpdatedTime: "Tue, 10 Nov 2009 23:00:00 UTC",
Elements: map[string]interface{}{
"Salutation": "Mr.",
"FullName": "Mak",
},
}
jsonData, _ := json.MarshalIndent(account, "", " ")
fmt.Println("root", string(jsonData))
}
方案3:使用log.SetPrefix完全控制输出
package main
import (
"encoding/json"
"log"
"os"
)
type AccountInfo struct {
Name string `json:"Name"`
PolicyID string `json:"PolicyID"`
UpdatedTime string `json:"UpdatedTime"`
Elements map[string]interface{} `json:"Elements"`
}
func main() {
// 设置全局logger前缀并移除时间戳
log.SetOutput(os.Stdout)
log.SetPrefix("root ")
log.SetFlags(0)
account := AccountInfo{
Name: "AccountInfo",
PolicyID: "1",
UpdatedTime: "Tue, 10 Nov 2009 23:00:00 UTC",
Elements: map[string]interface{}{
"Salutation": "Mr.",
"FullName": "Mak",
},
}
jsonData, _ := json.MarshalIndent(account, "", " ")
log.Println(string(jsonData))
}
所有方案都会输出:
root {
"Name": "AccountInfo",
"PolicyID": "1",
"UpdatedTime": "Tue, 10 Nov 2009 23:00:00 UTC",
"Elements": {
"Salutation": "Mr.",
"FullName": "Mak"
}
}
关键点:
log.SetFlags(0)移除时间戳log.SetPrefix("root ")设置自定义前缀- 或者使用
log.New()创建独立的logger实例 - 直接使用
fmt.Println可以完全控制输出格式

