我在Azure Blob存储中有2个CSV文件,我正在使用C#解析这些文件
- 第一个CSV文件是一个小文件,该文件包含从第二个CSV文件中的数据映射到API的映射,记录看起来像下面的
csvField1, apiField1.subfield1
csvField2, apiField2
csvField3, apiField5
csvField6, apiField1.subfield2
- 第二个CSV文件很大,因此我将使用stream读取它,并且该文件具有带有以下列名称的标题CSVFIELD1,CSFFIELD2,CSVFIELD4,CSFFIELD5,CSVFIELF6,CSFFIELD7
我希望输出像以下
这样的JSON{
apiField1:{
subfield1: value(csvField1)
subfield2: value(csvField6)
},
apiField2:value(csvField2),
apiField5: value(csvField3)
}
使用newtonsoft.json库的可行解决方案:
a(为apifield1
创建数据类class ApiField1
{
public ApiField1(string s1, string s2)
{
subfield1 = s1;
subfield2 = s2;
}
public string subfield1 { get;}
public string subfield2 { get;}
}
b(为API记录创建数据类
class ApiRecord
{
public ApiRecord(string[] s)
{
apiField1 = new ApiField1(s[0], s[5]);
apiField2 = s[1];
apiField5 = s[2];
}
public ApiField1 apiField1 { get; }
public string apiField2 { get; }
public string apiField5 { get; }
}
c(测试
class Program
{
static void Main(string[] args)
{
ApiRecord a = new ApiRecord("0,1,2,3,4,5".Split(','));
Console.WriteLine(JsonConvert.SerializeObject(a));
Console.ReadLine();
}
}
结果:
{"apiField1":{"subfield1":"0","subfield2":"5"},"apiField2":"1","apiField5":"2"}
我只是用简单的字符串" 0,1,2,3,4,5"测试。在您的情况下,您可以从CSV文件的流中读取每一行。
或,您可以使用字典:
Dictionary<string, String> apidield1 = new Dictionary<string, string>();
apidield1.Add("subfield1", "value(csvField1)");
apidield1.Add("subfield2", "value(csvField6)");
Dictionary<string, Object> apiRecord = new Dictionary<string, object>();
apiRecord.Add("apiField2", "value(csvField2)");
apiRecord.Add("apiField5", "value(csvField3)");
apiRecord.Add("apiField1", apidield1);
Console.WriteLine(JsonConvert.SerializeObject(apiRecord));
输出:
{"apiField2":"value(csvField2)","apiField5":"value(csvField3)","apiField1":{"subfield1":"value(csvField1)","subfield2":"value(csvField6)"}}