数码工坊
白蓝主题五 · 清爽阅读
首页  > 表格技巧

用Go语言轻松玩转JSON数据处理

在日常开发中,处理JSON几乎是每个程序员绕不开的任务。尤其是在写后端接口、解析配置文件或和前端交互时,JSON无处不在。Go语言因为语法简洁、性能出色,成了不少开发者处理JSON的首选工具。

结构体与JSON的自动映射

Go通过encoding/json包提供了开箱即用的JSON支持。最常用的场景就是把JSON字符串转成结构体,或者反过来。比如你收到一段用户信息:

{"name": "小明", "age": 25, "email": "xiaoming@example.com"}

可以直接定义一个结构体来接收:

type User struct {
    Name  string `json:"name"`
    Age   int    `json:"age"`
    Email string `json:"email"`
}

func main() {
    data := `{"name": "小明", "age": 25, "email": "xiaoming@example.com"}`
    var user User
    json.Unmarshal([]byte(data), &user)
    fmt.Printf("%+v\n", user)
}

这里的json:"xxx"是结构体标签,告诉Go字段对应JSON里的哪个键。反向操作也很简单,用json.Marshal就能把结构体转回JSON字符串。

处理不确定结构的JSON

有时候你拿到的JSON结构不固定,比如API返回的数据可能有多种格式。这时候可以用map[string]interface{}来接:

var result map[string]interface{}
json.Unmarshal([]byte(data), &result)
fmt.Println(result["name"])

虽然灵活,但取值时要小心类型断言,不然容易panic。比如result["age"]其实是float64,因为JSON没有整型概念,数字默认按浮点处理。

嵌套结构和切片处理

真实项目里,JSON往往更复杂。比如一个订单包含多个商品:

{
  "order_id": "1001",
  "items": [
    {"name": "键盘", "price": 299},
    {"name": "鼠标", "price": 99}
  ]
}

对应的结构体可以这样写:

type Order struct {
    OrderID string `json:"order_id"`
    Items   []struct {
        Name  string `json:"name"`
        Price int    `json:"price"`
    } `json:"items"`
}

解析之后就能直接遍历Items,方便又直观。

忽略空字段和隐私字段

有时候不想把某些字段输出到JSON里,比如用户密码。可以在标签里加-,omitempty

Password string `json:"-"`
Phone    string `json:"phone,omitempty"`

omitempty的字段如果为空,序列化时就会被跳过,生成更干净的输出。

Go处理JSON并不难,关键是熟悉结构体标签和常用方法。用熟了你会发现,比起手动拼字符串或层层判断类型,这种方式既安全又高效。