c# - 使用 json.net newtonsoft 将 csv 序列化为带有标头记录的 json
问题描述
我有一个简单的 csv,我正在尝试将其序列化为 json。如何将标题记录作为名称包含在名称值对中?
JsonSerializer serializer = new JsonSerializer();
var csv = new List<string[]>();
var lines = System.IO.File.ReadAllLines(file);
foreach (string line in lines)
csv.Add(line.Split(','));
string json = JsonConvert.SerializeObject(csv, Formatting.Indented);
解决方案
您可以使用 List ofDictionary<string,string>
但您还需要从 csv 获取标题行。我在下面给你一个粗略的想法。
// initialize the list
var list = new List<Dictionary<string, string>>();
var lines = System.IO.File.ReadAllLines("");
// get your header values
var headers = lines[0].Split(',');
// Here you want to skip the first line because it is the header
foreach (string line in lines.Skip(1))
{
// split your line to get individual values
var lineSplit = line.Split(',');
// make a dictionary to hold the line values
var dictionary = new Dictionary<string, string>();
// do a for loop to apply your headers
for (int i = 0; i < headers.Length; i++)
{
dictionary.Add(headers[i], lineSplit[i]);
}
// Add your dictionary to the list
list.Add(dictionary);
}
string json = JsonConvert.SerializeObject(list, Formatting.Indented);
以上将为您提供一个未包装在对象中的数组。如果您想要将其包装成对象的东西,您可以创建一个简单的类来处理它。下面的例子。
public class CsvToJson
{
public CsvToJson()
{
this.List = new List<Dictionary<string, string>>();
}
public CsvToJson(string filePath)
{
this.List = new List<Dictionary<string, string>>();
// Adding some exception prevention
if (File.Exists(filePath))
{
ConvertFromCsvToJson(filePath);
}
}
public List<Dictionary<string, string>> List { get; set; }
private void ConvertFromCsvToJson(string filePath)
{
var lines = File.ReadAllLines(filePath);
// get your header values
var headers = lines[0].Split(',');
foreach (string line in lines.Skip(1))
{
// split your line to get individual values
var lineSplit = line.Split(',');
// make a dictionary to hold the line values
var dictionary = new Dictionary<string, string>();
// do a for loop to apply your headers
for (int i = 0; i < headers.Length; i++)
{
dictionary.Add(headers[i], lineSplit[i]);
}
// Add your dictionary to the list
List.Add(dictionary);
}
}
}
然后,您可以随时使用以下内容轻松调用它。
var rootObject = new CsvToJson("C:\testFile.csv");
var json = JsonConvert.SerializeObject(rootObject, Formatting.Indented);
推荐阅读
- javascript - Link 的“as”和“href”不兼容值错误的解决方法
- ietf-netconf - 获取 bbf(宽带论坛)yangs 的 RPC 请求
- r - 如何编写一个函数来测试一个正整数 n 是否可以写为两个平方整数之和,即 n = i^2 +j^2 with i; j 2 N>0
- opencv - 应用 RANSAC 后如何计算异常点和内点?
- c# - 在 Unity 中移动相机抖动
- ruby-on-rails - 如何在 Render 上对基于 Rails 的应用程序进行健康检查?
- reactjs - 清理 useEffect 的正确方法
- prestashop - 如何在 Prestashop 中创建子主题
- discord.py - discord 1.0.1 的小问题让机器人离开
- java - 如何使用 Java 将 *abracadabra* 转换回字符串,就像 JavaScript decodeURIComponent(escape(x)) 一样?