json - 如何从 CSV 文件反序列化 json 逗号分隔的字符串

标签 json csv go

我有一个包含两列 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/

相关文章:

php - 如何使用 PHP 更有效地将 csv 文件导入 MySQL 数据库?

php - 使用 MySQL 和 PHP 在 CSV 文件上传时动态创建表

google-app-engine - 在 Google App Engine 上从 main.go 传递出去时上下文值发生变化

go - 在 Go 中实现一个接口(interface)

c# - WebAPI 返回没有根节点的 JSON 数组

python - 获取 Python JSON 以序列化日期时间

java - 无法读取我发送到 Android 应用程序的 JSON 响应

安卓改造 : POST Request with JSON payload and Images Attached

c# - CSV 到对象模型映射

go - 如何在golang中比较两个版本号字符串