【发布时间】:2020-03-06 16:01:26
【问题描述】:
我有一个 mysql 转储 csv 文件,其中包含两列 json1 和 json2,这两列都是 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。
观察
我正在使用 - golang 1.12.1
【问题讨论】:
-
这既不是正确的 CSV 也不是 JSON。您可以使用字符串阅读器读取该行,使用第一个引号,然后使用解码器解析 JSON,然后使用
",",然后使用解码器再次解析其余部分。 -
这基本上是不可能的。要么指定文件的格式,要么你必须为它编写一个解析器(你不能使用 encoding/{csv,json} 除非它实际上是 is CSV 和 JSON 或格式未指定,您需要使用似乎有效的启发式方法。有时更改上游更容易。