【问题标题】:Adding keys to existing json values向现有 json 值添加键
【发布时间】:2020-11-09 18:12:23
【问题描述】:

我正在使用 c# 将 csv 文件转换为 json 文件,但我收到的文件只是一堆值。我想在转换为 json 时将它们保存为 key => value 格式。

我的代码:

static void ReadFromCsv()
    {
        var csv = new List<string[]>();
        var lines = System.IO.File.ReadAllLines(@"C:\path\details.csv");
        foreach (string line in lines)
            csv.Add(line.Split(','));
        var json = JsonSerializer.Serialize(csv);
        File.WriteAllText(@"C:\path2\jsontest.json", json);
    }

json 文件是这样结束的:

[
"20-7-2020",
"Ben",
"Smith",
"+27745004488",
"Orange",
"Tree",
"54 Victoria Road"
],
[   
"20-7-2020",
"Jade",
"Hodsin",
"+27743456060",
"Apple",
"Plant",
"20 Small Street"
]

我的目标是让 json 看起来像下面这样,以便于存储到 sql DB 中:

[
"Date" : "20-7-2020",
"Name" : "Ben",
"Surname" : "Smith",
"Cell" : "+27745004488",
"Food" : "Orange",
"Source" : "Tree",
"Address" : "54 Victoria Road"
],
[   
"Date" : "20-7-2020",
"Name" : "Jade",
"Surname" : "Hodsin",
"Cell" : "+27743456060",
"Food" : "Apple",
"Source" : "Plant",
"Address" : "20 Small Street"
]

【问题讨论】:

  • 您可能希望 csv 成为 List&lt;object&gt; 并相应地填充它。不过考虑使用现有的 CSV 库。无需重新发明轮子。
  • 问题是客户端没有用密钥发送它,我将如何填充 'List' ?我在想我会在创建文件时添加密钥,但我找不到如何。我不是最擅长 c# 的,所以如果可以的话,请解释一下或给我一个链接。
  • 您是说 CSV 不包含标题行吗?你能从其他地方得到这些信息吗?是否会发生变化?
  • 是的,没有标题行。我必须手动添加标题。它可能会改变,但现在让我们假装它不会改变。
  • 有一个固定的标题让它更简单,看我的回答...

标签: c# json csv


【解决方案1】:

您需要单独阅读标题并将其余行的标题加入字典:

var csv = new List<Dictionary<string,string>>();
var lines = System.IO.File.ReadAllLines(@"C:\path\details.csv");
string[]header = lines[0].Split(',');

for (int i = 1; i < lines.Length; i++)
{
    string[] line = lines[i].Split(',');
    csv.Add(line.Zip(header, (value, key) => new { value, key })
                         .ToDictionary(x => x.key, x => x.value));
    
}

使用固定的标题会更容易:

string[] header = { "Date", "Name", "Surname", "Cell", "Food", "Source", "Address"};
foreach (string line in lines)
    csv.Add(line.Split(',').Zip(header, (value, key) => new { value, key })
                         .ToDictionary(x => x.key, x => x.value));

【讨论】:

    【解决方案2】:

    对我来说,处理这种情况的最佳方法是制作一个对象,按照您想要的值制作对象,并且您必须对其进行序列化。 根据我的经验,JS 中制作精良的对象将反序列化为 C# 中的正确对象。

    另外这种方法可以帮助你处理传入数据的错误,避免反序列化问题,正确检查JS中的数据可以避免很多问题。

    我猜你不需要全班来帮你做这个把戏。 希望它对您有所帮助。 祝你有美好的一天。

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 2014-01-06
      • 2015-01-28
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多