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整個帳戶數組)。
希望有幫助。如果您需要更具體的幫助,請發表評論。

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/
一句忠告:永遠不要忽略錯誤,它們可能會給你有用的信息。
- 2 回答
- 0 關注
- 223 瀏覽
添加回答
舉報