在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的基本操作,在实际应用中可以根据需要进行相应的扩展和定制。