我有一个包含两列 json1 和 json2 的 mysql 转储 csv 文件,这两列都是 JSON 对象字符串表示形式。因此 csv 行如下所示:
"{"field1":"value","field2":4}","{"field1":"value","field2":4}"
我需要反序列化这两个字符串,然后将 JSON 解码为 Go 值。我被困在第一步。我在使用
,
时遇到问题因为 JSON 字符串本身有 ,
s 在它们里面,所以读者在错误数量的字段中打破每一行,从不需要两个。这是我的完整代码:
reader := csv.NewReader(csvFile)
reader.LazyQuotes = true //allows non-doubled quotes to appear in quoted fields
for {
record, err := reader.Read()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
fmt.Printf("json1: %s json2 %s\n", record[0], record[1])
}
我试过的
我尝试将 csv 分隔符设置为
}","{
然后附加相应的}
和 {
到结果字符串,但除了容易出错之外,一些行有 NULL
json1 或 json2。观察
我正在使用
- 戈朗 1.12.1
最佳答案
我只会使用 strings.Split()
在 }","{
上拆分(如果您确定这将始终有效)然后按照您的说法解码 JSON 字符串。你能让转储文件以某种方式分隔嵌套引号吗?
columns := strings.Split(`"{"field1":"value","field2":4}","{"field1":"value","field2":5}"`, `}","{`)
for i, s := range columns {
if i == 0 {
s = s[1:] // remove leading quote
}
if i == len(columns) - 1 {
s = s[:len(s)-1] // remove trailing quote
}
if i > 0 {
s = "{" + s
}
if i < len(columns) - 1 {
s += "}"
}
// unmarshal JSON ...
}
这有点麻烦,但即使某些字段为 NULL 也应该可以工作。
关于json - 如何从 CSV 文件反序列化 json 逗号分隔的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60555005/