【问题标题】:Create JSON Dynamically using variables containing element names with Dot notation使用包含带有点符号的元素名称的变量动态创建 JSON
【发布时间】:2019-12-07 21:29:13
【问题描述】:

我在 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)
}

【问题讨论】:

    标签: c# azure-blob-storage


    【解决方案1】:

    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)"}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      相关资源
      最近更新 更多