Проблема с вашим кодом на самом деле заключается в том, что вы пытаетесь преобразовать файл в байты с помощью:
file, _ := ioutil.ReadFile("accounts.csv")
..., а затем вы СНОВА пытаетесь преобразовать этот фрагмент байтов в JSON байты с:
jsonConv, _ := json.Marshal(file)
Где текстовое содержимое файла сохраняется в виде фрагмента байтов в переменной file
, а затем этот фрагмент байтов (содержимое файла в байтовой форме) затем преобразуется в массив JSON байтов. Таким образом, вы в основном отправляете массив JSON чисел ... нехорошо.
Нормальный поток здесь будет заключаться в том, чтобы взять file
байтов, а затем создать Go структуры из Это. Как только ваши Go объекты будут на месте, ТОГДА вы должны перейти к JSON. Это преобразует объекты Go в фрагмент байтов ПОСЛЕ того, как они были преобразованы в текстовую форму JSON.
Итак, вам не хватает среднего шага структуры Go, но вы также должны помнить что преобразование структуры Go в JSON байтов с помощью json.Marshal()
будет отображать только экспортированные поля. Кроме того, обычно вы должны использовать структурные теги, чтобы точно настроить, как будут отображаться поля.
Лучше всего придерживаться 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: "tom@example.com"}
acct2 := Account{Username: "dick", Email: "dick@example.com"}
acct3 := Account{Username: "harry", Email: "harry@example.com"}
//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
//...
}
Runnable здесь на игровой площадке.
Ключ в том, что структуры настроены и готовы к go и тегам struct определите, какими будут имена полей JSON (т.е. username
& email
для каждой учетной записи и accounts
для всего массива учетных записей).
Надеюсь, что это поможет. Напишите комментарий, если вам нужна дополнительная информация c помощь.