【发布时间】:2016-05-25 14:52:08
【问题描述】:
目前我有这些方面的 CSV:
"NAME","AGE","SEX"
"FRED, JONES","45","MALE"
"SALLY, SMITH","60","FEMALE"
我使用以下代码将其序列化为 JSON:
var linesCSV = System.IO.File.ReadAllLines(targetFile); //target file is the csv
var csv = linesCSV.Select(l => l.Split(',')).ToList();
var headers = csv[0];
var dicts = csv.Skip(1).Select(row => Enumerable.Zip(headers, row, System.Tuple.Create).ToDictionary(p => p.Item1, p => p.Item2)).ToArray();
string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(dicts);
jsWrtr.WriteLine(json);
这样输出:
[{
"\NAME\"" : "\"FRED\"",
"\AGE\"" : "\"JONES\"",
"\SEX\"" : "\"45\""
},
{
"\NAME\"" : "\"SALLY\"",
"\AGE\"" : "\"SMITH\"",
"\SEX\"" : "\"60\""
}]
您可以看到NAME 被拆分,第二部分(逗号后的部分)被放入下一个字段。
这显然是因为中间有逗号,但我的问题是如何解析 CSV 以便输出以下内容:
[{
"NAME" : "FRED, JONES",
"AGE" : "45",
"SEX" : "MALE"
},
{
"NAME" : "SALLY, SMITH",
"AGE" : "60",
"SEX" : "FEMALE"
}]
【问题讨论】:
-
你用逗号分隔字段,但你不应该用双引号吗?
-
您可以将CsvHelper library 与自定义地图一起使用。不是最简单的解决方案,但它有一些优势。