使用golang解析CSV文件中的嵌套JSON对象

使用golang解析CSV文件中的嵌套JSON对象,json,csv,parsing,go,Json,Csv,Parsing,Go,我试图解析一个CSV文件,该文件在最后一列中包含一个JSON对象。 以下是输入CSV文件中两行的示例: 'id','value','createddate','attributes' 524256,CAFE,2018-04-06 16:41:01,{"Att1Numeric": 6, "Att2String": "abc"} 524257,BEBE,2018-04-06 17:00:00,{} 我尝试使用csv包中的解析器: func processFileAsCSV(f *multipart

我试图解析一个CSV文件,该文件在最后一列中包含一个JSON对象。
以下是输入CSV文件中两行的示例:

'id','value','createddate','attributes'
524256,CAFE,2018-04-06 16:41:01,{"Att1Numeric": 6, "Att2String": "abc"}
524257,BEBE,2018-04-06 17:00:00,{}
我尝试使用
csv
包中的解析器:

func processFileAsCSV(f *multipart.Part) (int, error) {
  reader := csv.NewReader(f)
  reader.LazyQuotes = true
  reader.Comma = ','
  lineCount := 0
  for {
    line, err := reader.Read()
    if err == io.EOF {
        break
    } else if err != nil {
        fmt.Println("Error:", err)
        return 0, err
    }

    if lineCount%100000 == 0 {
        fmt.Println(lineCount)
    }
    lineCount++
    fmt.Println(lineCount, line)
    processLine(line) // do something with the line
  }

  fmt.Println("done!", lineCount)
  return lineCount, nil
}
但我有一个错误:

错误:第2行第0列:第2行中的字段数错误

可能是因为解析器忽略了以
{
开头的JSON范围


我应该编写自己的CSV解析器,还是有一个库可以处理这个问题?

您的CSV输入不遵循正常的CSV约定,使用无引号的字段(用于JSON)

我认为最好的方法是在Go程序或外部脚本中预处理您的输入


如果您的CSV输入是可预测的(如您的问题中所示),那么应该可以很容易地正确引用最后一个元素,例如,在将其传递给CSV解析器之前,使用一个简单的
字符串.Split
调用。

您的CSV输入不遵循正常的CSV约定,使用不带引号的字段(对于JSON)

我认为最好的方法是在Go程序或外部脚本中预处理您的输入


如果您的CSV输入是可预测的(如您的问题所示),应该很容易正确引用最后一个元素,使用一个简单的
字符串。例如,在将其传递给CSV解析器之前,拆分
调用。

请发布您尝试过的内容。请发布您尝试过的内容。我怀疑预处理文件会很困难,因为输入文件(可能很大)是通过网络到达的,并且在传入时正在处理(注意
multipart.Part
)。一点也不。只需创建一个
io.Reader
包装器,它在输入时读取每一行,调用
strings.SplitN(输入,4)
,正确引用/转义最后一个字段,然后将修改后的行作为输出写入。我怀疑预处理文件会很困难,因为输入文件(可能很大)是通过网络到达的,并且在传入时正在处理(注意
多部分.Part
)。一点也不。只需创建一个
io.Reader
包装器,该包装器在输入时读取每一行,调用
strings.SplitN(input,4)
,正确引用/转义最后一个字段,然后将修改后的行写入输出。