使用golang解析CSV文件中的嵌套JSON对象
我试图解析一个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文件中两行的示例:
'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)
,正确引用/转义最后一个字段,然后将修改后的行写入输出。