我在Azure Blob存储中有2个csv文件,我正在使用C#解析这些文件
第一个csv文件是一个小文件,其中包含从第二个csv文件中的数据到API的映射。记录如下所示
csvField1, apiField1.subfield1
csvField2, apiField2
csvField3, apiField5
csvField6, apiField1.subfield2
第二个csv文件很大,因此我将使用流来读取它,并且该文件具有带有以下列名称的标头
csvField1,csfField2,csvField4,csfField5,csvField6,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)"}}
关于c# - 使用包含元素名称和Dot表示法的变量动态创建JSON,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57272499/