亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

來自 csv 文件的 JSON 格式的 Golang POST 請求

來自 csv 文件的 JSON 格式的 Golang POST 請求

Go
收到一只叮咚 2022-06-13 15:06:02
所以我正在嘗試將 JSON 格式的 csv 文件發布到 Golang 中的網站。我已經成功發布了一個單一的 JSON 文件。但是,這不是我希望我的程序的目的?;旧希艺趪L試為網站創建一個帳戶生成器。我希望能夠一次生成多個帳戶。我覺得最好的方法是使用 csv 文件。我嘗試使用 encoding/csv 來讀取 csv 文件,然后編組為 JSON。另外,ioutil.ReadFile(). 但是,該站點的響應是,“名字是必填字段,姓氏是必填字段”等。因此,這顯然意味著 csv 數據不會進入 JSON 格式。我將在下面使用 ioutil.ReadFile() 顯示我的代碼。func main() {file, _ := ioutil.ReadFile("accounts.csv")    jsonConv, _ := json.Marshal(file)    client := http.Client{}    req, err := http.NewRequest("POST", "websiteUrlHere", bytes.NewBuffer(jsonConv))    req.Header.Add("cookie", `"really long cookie goes here"`)    req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36")    req.Header.Set("content-type", "application/json")    resp, err := client.Do(req)    if err != nil {        fmt.Print(err)    }    defer resp.Body.Close()}(^ 這只是代碼片段)。我對這一切還是很陌生,所以請理解這個問題是否缺少任何東西。我也尋找過類似的問題,但我發現的只是結構的使用。我覺得這不適用于此,因為目標是一次創建無限帳戶。希望以上內容就足夠了。謝謝你。
查看完整描述

2 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

您的代碼的問題實際上是您正在嘗試將文件轉換為字節:


file, _ := ioutil.ReadFile("accounts.csv")

...然后您再次嘗試將該字節片段轉換為 JSON 字節:


jsonConv, _ := json.Marshal(file)

文件的文本內容作為字節切片存儲在變量file中,然后該字節切片(字節形式的文件內容)被轉換為 JSON 字節數組。所以你基本上是在發送一個 JSON 數字數組......不好。


這里的正常流程是獲取file字節,然后從中創建一個 Go 結構。一旦你的 Go 對象就位,那么你將編組為 JSON。這會將 Go 對象轉換為 JSON 文本形式之后的字節切片。


因此,您缺少的是 Go 結構中間步驟,但您還應該記住,將 Go 結構轉換為 JSON 字節json.Marshal()只會顯示導出的字段。此外,通常您應該使用 struct 標簽來準確自定義字段的顯示方式。


你最好的選擇就是堅持使用 JSON,忘記 CSV。在您自己的代碼示例中,您正在獲取一個 CSV,然后嘗試將其轉換為 JSON……那么,只需使用 JSON。


如果您想發送多個帳戶,只需將您的 Go 結構設為一個切片,它將編組為一個 JSON 數組,這基本上就是您想要做的。最終結果將是一個 JSON 帳戶數組。這是一個簡單的例子:


package main


import (

    "fmt"

    "encoding/json"

)


type Account struct {

    Username string `json:"username"`

    Email string `json:"email"`

}


type AccountsRequest struct {

    Accounts []Account `json:"accounts"`

}


func main() {

    //gather account info

    acct1 := Account{Username: "tom", Email: "[email protected]"}

    acct2 := Account{Username: "dick", Email: "[email protected]"}

    acct3 := Account{Username: "harry", Email: "[email protected]"}

    

    //create request

    acctsReq := AccountsRequest{Accounts: []Account{acct1, acct2, acct3}}

    

    //convert to JSON bytes/data

    //jsonData, _ := json.Marshal(acctsReq)

    

    //debug/output

    jsonDataPretty, _ := json.MarshalIndent(acctsReq, "", "  ")

    fmt.Println(string(jsonDataPretty))

    

    //send request with data

    //...

}

可在操場上運行。


關鍵是結構已設置好并準備就緒,結構標簽確定 JSON 字段名稱將是什么(即username&email用于每個帳戶和accounts整個帳戶數組)。


希望有幫助。如果您需要更具體的幫助,請發表評論。


查看完整回答
反對 回復 2022-06-13
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

您需要先解析 CSV 文件并將其轉換為您想要的列表:


package main



func main() {

   file, err := os.Open("file.csv")

   if err != nil {

      log.Fatal("failed opening file because: %s", err.Error())

   }

   r := csv.NewReader(file)


   records, err := r.ReadAll()

   if err != nil {

      log.Fatal(err)

   }

   fmt.Print(records)

}

上面的代碼將列表解析為 [][]string 數組。您現在需要遍歷該數組并將其轉換為頁面所需的 json 對象。然后就可以發送了。您可以在此處閱讀有關 csv 包的更多信息:https ://golang.org/pkg/encoding/csv/


一句忠告:永遠不要忽略錯誤,它們可能會給你有用的信息。


查看完整回答
反對 回復 2022-06-13
  • 2 回答
  • 0 關注
  • 223 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號