C#无法将.csv列转换为JSON转换的列表列表

mo49yndu  于 5个月前  发布在  C#
关注(0)|答案(1)|浏览(62)

我正在向一个API发出一个post请求,它使用以下格式(列表列表)。

var data = "{\"Coord\" : [[50.452603, 30.522025],[30.621929, 31.012975]]}";

字符串
我有一个.csv文件,其中有一个纬度和纬度列,我想转换为上述JSON格式。
| Lat| LNG|
| --|--|
| 50.452603| 30.522025|
| 30.621929| 31.012975|
下面是我的代码的一个例子,但它是一个字典列表。我不知道如何修改它来创建上面的代码。

WorkBook workbook = WorkBook.LoadCSV("C:\\local\\Test\\Test.csv", fileFormat: ExcelFileFormat.XLSX, listDelimiter: ",");
WorkSheet ws = workbook.DefaultWorkSheet;
DataTable dt = ws.ToDataTable(true);

List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
foreach (DataRow dr in dt.Rows)
{
    row = new Dictionary<string, object>();
    foreach (DataColumn col in dt.Columns)
    {
        row.Add(col.ColumnName, dr[col]);
    }
    rows.Add(row);
    string json = JsonConvert.SerializeObject(rows);
    Console.WriteLine(json);
}

kr98yfug

kr98yfug1#

这个json也兼容数组列表,我认为这在这里更有意义。我们还可以做一些其他的改进。从这个开始,它使用Microsoft.VisualBasic.FileIO命名空间(NuGet上有更好的csv解析器,但这是内置的):

IEnumerable<string[]> ReadCSV(string path)
{
    using (var parser = new TextFieldParser(path))
    {
        parser.Delimiters = new string[] { "," };

        parser.ReadFields(); // read past the header
        while (!parser.EndOfData)
        {
            yield return parser.ReadFields();
        }
    }
}

字符串
然后有一个这样的类:

class JsonCoordHelper {
    public IEnumerable<string[]> Coord {get;set;}
}


我们可以这样使用它们:

var data = new JsonCoordHelper();
data.Coord = ReadCSV(@"C:\local\Test\Test.csv");
var result = JsonConvert.SerializeObject(data);


请看这里:
https://dotnetfiddle.net/KAdjFK
注意,我使用了string[]而不是double[]或类似的,因为这些值在json文件中最终仍然是字符串。然而,这确实会留下一些额外的引号。如果你需要在自己的程序中对数据进行进一步的处理,或者如果这些引号被证明是有效的,你可能需要将这些值解析为double

class JsonCoordHelper {
    public IEnumerable<double[]> Coord {get;set;}
}

// ...
data.Coord = ReadCSV(@"C:\local\Test\Test.csv").
                Select(r => r.Select(c => double.Parse(c)).ToArray() );


但是除非你需要,否则不要做上面的事情,因为这需要大量的额外数组分配,并且由于国际化/文化问题,从字符串中解析数字并不是我们认为应该的高效或简单的操作。

相关问题