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: "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
//...
}
可在操场上运行。
关键是结构已设置好并准备就绪,结构标签确定 JSON 字段名称将是什么(即username&email用于每个帐户和accounts整个帐户数组)。
希望有帮助。如果您需要更具体的帮助,请发表评论。
TA贡献2039条经验 获得超7个赞
您需要先解析 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 关注
- 181 浏览
添加回答
举报