我在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/

10-17 00:24