日日行,不怕千万里;常常做,不怕千万事|

__username

园龄:2年5个月粉丝:12关注:2

📂Go
🔖Go
2024-12-10 15:21阅读: 24评论: 0推荐: 0

go json

在 Go 语言中,当爬虫返回 JSON 数据时,可以通过 encoding/json 包解析 JSON 数据并提取其中的值。以下是两种常见方法来解析 JSON 数据并获取特定字段(如 code)。


示例 JSON 数据

假设你爬取到的 JSON 数据如下:

{
"code": 200,
"message": "成功",
"data": {
"user": "张三",
"email": "zhangsan@example.com"
}
}

方法 1:使用结构体解析 JSON

这种方法适合知道 JSON 数据结构的情况。将 JSON 映射到 Go 的结构体,然后提取需要的字段。

示例代码

package main
import (
"encoding/json"
"fmt"
)
type Response struct {
Code int `json:"code"`
Message string `json:"message"`
Data struct {
User string `json:"user"`
Email string `json:"email"`
} `json:"data"`
}
func main() {
// 模拟爬虫返回的 JSON 数据
jsonStr := `{
"code": 200,
"message": "成功",
"data": {
"user": "张三",
"email": "zhangsan@example.com"
}
}`
// 解析 JSON 数据
var resp Response
err := json.Unmarshal([]byte(jsonStr), &resp)
if err != nil {
fmt.Println("解析 JSON 失败:", err)
return
}
// 提取字段值
fmt.Println("Code:", resp.Code)
fmt.Println("Message:", resp.Message)
fmt.Println("User:", resp.Data.User)
fmt.Println("Email:", resp.Data.Email)
}

输出

Code: 200
Message: 成功
User: 张三
Email: zhangsan@example.com

方法 2:

map[string]interface{} 解析 JSON

这种方法适合不知道 JSON 数据结构的情况。通过映射到通用的 map 来动态提取字段。

示例代码

package main
import (
"encoding/json"
"fmt"
)
func main() {
// 模拟爬虫返回的 JSON 数据
jsonStr := `{
"code": 200,
"message": "成功",
"data": {
"user": "张三",
"email": "zhangsan@example.com"
}
}`
// 将 JSON 字符串解析为 map
var result map[string]interface{}
err := json.Unmarshal([]byte(jsonStr), &result)
if err != nil {
fmt.Println("解析 JSON 失败:", err)
return
}
// 提取字段值
code := result["code"].(float64) // JSON 数字默认解析为 float64
message := result["message"].(string)
data := result["data"].(map[string]interface{})
user := data["user"].(string)
email := data["email"].(string)
fmt.Println("Code:", int(code))
fmt.Println("Message:", message)
fmt.Println("User:", user)
fmt.Println("Email:", email)
}

输出

Code: 200
Message: 成功
User: 张三
Email: zhangsan@example.com

注意事项

  • 通过 map[string]interface{} 解析 JSON 时,数字类型默认会被解析为 float64,需要类型转换。
  • 使用类型断言时(如 result["code"].(float64)),要确保字段存在并且类型匹配,否则会触发 panic

选择合适的方法

  1. 已知 JSON 结构时,推荐使用 结构体解析,代码更安全、可读性更高。
  2. 未知或动态 JSON 结构时,推荐使用 map[string]interface{} 解析,更具灵活性。
posted @   __username  阅读(24)  评论(0编辑  收藏  举报
历史上的今天:
2023-12-10 安装jsdom/tough-cookie 【Error: Cannot find module ‘jsdom‘】的解决方法

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起