我是 Go 的新手,正在尝试使用 github 中的库将 JSON 解析为 CSV。 https://github.com/jehiah/json2csv
但我遇到了这个问题:https://github.com/jehiah/json2csv/issues/22作者没有回复。
我意识到,如果我们将以下 JSON 作为 json.input 提供给文件:
{"user": {"name":["jehiah, mike, semo"], "password": "root"}, "remote_ip": "127.0.0.1", "dt" : "[20/Aug/2010:01:12:44 -0400]"}
{"user": {"name":["jeroenjanssens", "jeroen2", "jero55"], "password": "123"}, "remote_ip": "192.168.0.1", "dt" : "[20/Aug/2010:01:12:44 -0400]"}
{"user": {"name":"markdata", "password": ""}, "remote_ip": "76.216.210.0", "dt" : "[20/Aug/2010:01:12:45 -0400]"}
现在,如果我尝试将它用作命令:go run main.go -k user.name -i input.json -o output.json
它返回以下输出:
"[jehiah, mike, semo]"
[jeroenjanssens jeroen2 jero55]
markdata
但如 opend issued 中所述,我期待响应为:
jehiah, mike, semo
jeroenjanssens, jeroen2, jero55
markdata
我猜它是由于行而发生的:https://github.com/jehiah/json2csv/blob/master/main.go#L110无论如何,这就是在阅读该行时删除逗号。
能否就如何实现上述预期输出提出建议?
问候
最佳答案
使用这段代码,您将能够真正轻松地读取 Go 结构中的 json 数据:
package main
import (
"encoding/json"
"fmt"
)
// define the User type
type User struct {
Name []string
Password string
}
type DataStruct struct {
User User
Remote_ip string
Dt string
}
func main() {
var jsonBlob = []byte(`{"user": {"name":["jehiah, mike, semo"], "password": "root"},
"remote_ip": "127.0.0.1", "dt" : "[20/Aug/2010:01:12:44 -0400]"}`)
var data DataStruct
err := json.Unmarshal(jsonBlob, &data)
if err != nil {
fmt.Println("error:", err)
} else {
fmt.Printf("%+v", data)
}
}
如果您从未使用过encoding/json 包,您应该阅读官方 Golang json article .
当您正确读取DataStruct 结构中的数据后,您将能够使用适当的Golang csv package 序列化它。 .
关于json - 使用 Go 正确解析 JSON 数据时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25566411/