在 Go 的 POST 請求中傳送 JSON 字串

Jay Singh 2023年1月30日
  1. 在 Go 的 POST 請求中傳送 JSON 字串
  2. 在 Golang 的 POST 請求中傳送 JSON 字串
在 Go 的 POST 請求中傳送 JSON 字串

JavaScript Object Notation (JSON) 是 Web 開發中常用的資料傳輸格式。它易於使用和理解。

你可以使用 Go 語言建立 JSON POST 請求,但你需要匯入多個 Go 包。net/HTTP 包包括良好的 HTTP 客戶端和伺服器支援。

Go 中的 JSON 包還提供 JSON 編碼和解碼。

在本教程中,你將學習如何使用 Go 語言執行 JSON POST 請求。在本教程中,你將學習如何使用 Go 語言將 JSON 字串作為 POST 請求傳遞。

在 Go 的 POST 請求中傳送 JSON 字串

下面顯示了一個包含課程和路徑列表的基本 JSON 檔案。

{
    "Courses": [
        "Golang",
        "Python"
    ],
    "Paths": [
        "Coding Interviews",
        "Data Structure"
    ]
}

下面的程式碼顯示瞭如何將 USER JSON 物件提交給服務 reqres.in 以構造使用者請求。

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
)
type User struct {
    Name string  	`json:"name"`
    Job string 	    `json:"job"`
}

func main(){

    user := User{
        Name: "Jay Singh",
        Job: "Golang Developer",
    }

    body, _ := json.Marshal(user)

    resp, err := http.Post("https://reqres.in/api/users", "application/json", bytes.NewBuffer(body) )

    if err != nil {
        panic(err)
    }

    defer resp.Body.Close()

    if resp.StatusCode == http.StatusCreated {
        body, err := ioutil.ReadAll(resp.Body)
        if err != nil {
            panic(err)
        }
        jsonStr := string(body)
        fmt.Println("Response: ", jsonStr)

    } else {
        fmt.Println("Get failed with error: ", resp.Status)
    }
}

輸出:

Response:  {
        "name":"Jay Singh",
        "job":"Golang Developer",
        "id":"895",
        "createdAt":"2022-04-04T10:46:36.892Z"
}

在 Golang 的 POST 請求中傳送 JSON 字串

這是簡單的 JSON 程式碼。

{
    "StudentName": "Jay Singh",
    "StudentId" : "192865782",
    "StudentGroup": "Computer Science"
}
package main

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

type StudentDetails struct {
        StudentName  string `json:"StudentName"`
        StudentId    string `json:"StudentId"`
        StudentGroup string `json:"StudentGroup"`
}

func main() {

        studentDetails := StudentDetails{
                StudentName:  "Jay Singh",
                StudentId:    "192865782",
                StudentGroup: "Computer Science",
        }

        body, _ := json.Marshal(studentDetails)

        resp, err := http.Post("<https://reqres.in/api/users>", "application/json", bytes.NewBuffer(body))

        if err != nil {
                panic(err)
        }

        defer resp.Body.Close()

        if resp.StatusCode == http.StatusCreated {
                body, err := ioutil.ReadAll(resp.Body)
                if err != nil {
                        panic(err)
                }
                jsonStr := string(body)
                fmt.Println("Response: ", jsonStr)

        } else {
                fmt.Println("Get failed with error: ", resp.Status)
        }

}

輸出:

Response:  {
        "StudentName":"Deven Rathore",
        "StudentId":"170203065",
        "StudentGroup":"Computer Science",
        "id":"868",
        "createdAt":"2022-04-04T12:35:03.092Z"
}