Go语言解析JSON数组并逐个发送至REST接口的完整教程-Golang

本文详解如何在go中正确读取包含多个json对象的数组文件,将其解析为可遍历结构,并逐一序列化为原始json字节流发送至rest端点,避免类型断言错误与内存冗余。

在Go中处理JSON数组(尤其是顶层为 []object 的文件)时,常见误区是预先定义强类型结构体——当字段动态、嵌套复杂或仅需透传原始JSON时,反而增加维护成本且易因字段缺失/类型不匹配导致解析失败。更灵活、可靠的方式是采用 interface{} + 类型断言进行泛型解析,再用 json.Marshal 将每个元素还原为独立JSON字节流,直接用于HTTP请求。

以下是一个生产就绪的完整示例,涵盖文件读取、安全解析、逐对象序列化及错误处理:

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "time"
)

func main() {
    // 1. 读取JSON数组文件
    data, err := ioutil.ReadFile("dat_one_extract.json")
    if err != nil {
        log.Fatalf("读取文件失败: %v", err)
    }

    // 2. 解析为顶层接口切片 []interface{}
    var jsonArray []interface{}
    if err := json.Unmarshal(data, &jsonArray); err != nil {
        log.Fatalf("JSON解析失败: %v", err)
    }

    // 3. 遍历每个JSON对象,序列化后发送至REST端点
    endpoint := "https://api.example.com/ingest"
    client := &http.Client{Timeout: 30 * time.Second}

    for i, item := range jsonArray {
        // 将单个对象重新编码为JSON字节(保持原始结构与格式)
        jsonBytes, err := json.Marshal(item)
        if err != nil {
            log.Printf("第 %d 项序列化失败: %v", i+1, err)
            continue
        }

        // 4. 构造HTTP POST请求(Content-Type: application/json)
        req, err := http.NewRequest("POST", endpoint, bytes.NewReader(jsonBytes))
        if err != nil {
            log.Printf("第 %d 项构建请求失败: %v", i+1, err)
            continue
        }
        req.Header.Set("Content-Type", "application/json")

        // 5. 发送请求
        resp, err := client.Do(req)
        if err != nil {
            log.Printf("第 %d 项发送失败: %v", i+1, err)
            continue
        }
        defer resp.Body.Close()

        if resp.StatusCode = 300 {
            log.Printf("第 %d 项接收非成功状态码: %d", i+1, resp.StatusCode)
            continue
        }

        fmt.Printf("✅ 第 %d 项已成功发送\n", i+1)
    }
}

⚠️ 关键注意事项:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » Go语言解析JSON数组并逐个发送至REST接口的完整教程-Golang
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4022774+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4022774+
  • 本周更新: 0+
  • 最后更新: 2026-03-16