Golang中的Json标签(持续更新...)
    		       		warning:
    		            这篇文章距离上次修改已过434天,其中的内容可能已经有所变动。
    		        
        		                
                在Golang中,处理JSON数据通常涉及到标准库encoding/json。以下是一些处理JSON数据的常见操作:
- 将Go的结构体编码为JSON:
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
 
func main() {
    person := Person{"Alice", 30}
    jsonData, err := json.Marshal(person)
    if err != nil {
        log.Fatalf("JSON marshaling failed: %s", err)
    }
    fmt.Printf("%s\n", jsonData)
}- 解码JSON到Go的结构体:
func main() {
    var person Person
    jsonData := `{"name":"Alice","age":30}`
    err := json.Unmarshal([]byte(jsonData), &person)
    if err != nil {
        log.Fatalf("JSON unmarshaling failed: %s", err)
    }
    fmt.Printf("%+v\n", person)
}- 使用json.Decoder和json.Encoder进行更高效的流式处理:
func main() {
    enc := json.NewEncoder(os.Stdout)
    dec := json.NewDecoder(os.Stdin)
    // 编码
    if err := enc.Encode(person); err != nil {
        log.Fatal(err)
    }
    // 解码
    var p Person
    if err := dec.Decode(&p); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%+v\n", p)
}- 处理JSON数组或其他复杂数据结构:
type People []Person
 
func main() {
    people := People{{"Alice", 30}, {"Bob", 25}}
    jsonData, err := json.Marshal(people)
    if err != nil {
        log.Fatalf("JSON marshaling failed: %s", err)
    }
    fmt.Printf("%s\n", jsonData)
}- 处理JSON中的字段省略(omitempty)标签:
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age,omitempty"` // 如果Age为0,则在JSON中省略Age字段
}- 处理JSON中的字段忽略(-)标签:
type Person struct {
    Name string `json:"name"`
    Age  int    `json:"-"` // 忽略Age字段,不会出现在JSON中
}- 使用json.Number处理大数整数:
type Tweet struct {
    Id json.Number `json:"id"`
    // ...
}- 使用map[string]interface{}处理动态JSON结构:
var result map[string]interface{}
err := json.Unmarshal(data, &result)
if err != nil {
    log.Fatalf("JSON unmarshaling failed: %s", err)
}这些是处理JSON的基本操作,在实际应用中可以根据需要进行相应的扩展和定制。
评论已关闭