我有一个csv文件,在一行中有两列具有多个值。我想将其转换为列表
示例:CSV数据
Id name parentid
1 sam 12-george
24-jennifer
Json数据
[{id:1,name:sam,parentid:[{id:12,name:george},{id:24,name:jennifer}]}]]
class Program
{
const string CSV =
@"Id name parentid
1 sam 12-george
24-jennifer";
static void Main(string[] args)
{
var csvArray = new JArray();
// Split to lines
string[] lines = CSV.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
// Ignore header line
JArray currentParentArray = null;
for (int i = 1; i < lines.Length; i++)
{
string[] items = lines[i].Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
if (items.Length == 3)
{
var line = new JObject();
csvArray.Add(line);
line["id"] = int.Parse(items[0]);
line["name"] = items[1];
currentParentArray = new JArray();
line["parentid"] = currentParentArray;
ParseParentId(items[2], currentParentArray);
}
if (items.Length == 1 && currentParentArray != null)
ParseParentId(items[0], currentParentArray);
}
var ser = JsonSerializer.CreateDefault();
string json = csvArray.ToString();
Console.WriteLine(json);
Console.ReadKey();
}
static void ParseParentId(string parentId, JArray parentArray)
{
int idx = parentId.IndexOf("-");
string id = parentId.Substring(0, idx);
string name = parentId.Substring(1 + idx);
var obj = new JObject();
obj["id"] = int.Parse(id);
obj["name"] = name;
parentArray.Add(obj);
}
}
此C#源应该可以工作。如果在下一行仅包含另一个parentid,则在行之间记住parentid的数组并将其添加到该数组中。
向Newtonsoft.Json添加Nuget引用进行编译。