2016-11-10 86 views
0

我有一个非常嵌套的大量json文件。我需要根据特定字段的名称编写多个csv文件,如果它存在,那么将值添加到我创建的头文件中,如果它不创建新文件的话。这工作得很好。然而,我遇到了一个问题,其中标题不匹配,因为该记录不存在此特定标题。例如:从json创建每个记录具有不同标题值的csv文件

Header: Dog Cat Mouse Horse 
Record1: yes yes yes yes 

//上述与添加记录两个的所有值 其中标头值根本没有被

Header: Dog Cat Mouse Horse 
Record1: yes yes yes yes 
Record2: yes yes yes *** 

RECORD2中列出的文件的一个例子以上没有对小鼠记录,但因为它没有排队是向左移动。在将值传递给文件之前,我需要在头文件之下写入一个Null。下面是我的代码,如果你能帮助将是巨大的,因为我在这一点上失去了:

 static List<string> headList = new List<string>(); 
     static List<string> newHeaderList = new List<string>(); 
     static List<string> valueList = new List<string>(); 
     static List<string> oldHeadList = new List<string>(); 
     static void Main() 
     { 
      var data = JsonConvert.DeserializeObject<dynamic>(File.ReadAllText(
          @"C:\Users\nphillips\workspace\2016R23\UITestAutomation\SeedDataGenerator\src\staticresources\seeddata.resource")); 
      string fileName = ""; 
      var bundles = data.RecordSetBundles; 

      foreach (var bundle in bundles) 
      { 
       var records = bundle.Records; 
       foreach (var record in records) 
       { 
        var test = record.attributes; 
        foreach (var testagain in test) 
        { 
         // Getting the object Name Ex. Location, Item, etc. 
         var jprop = testagain as JProperty; 
         if (jprop != null) 
         { 
          fileName = jprop.First.ToString().Split('_')[2] + ".csv"; 
         } 
         break; 
        } 
        string header = ""; 
        string value = ""; 
        foreach (var child in record) 
        { 
         var theChild = child as JProperty; 
         if (theChild != null && !theChild.Name.Equals("attributes")) 
         { 
          // adding the name and values to list 
          headList.Add(child.Name); 
          valueList.Add(child.Value.ToString()); 
         } 
        } 
        // calling method to write columns and values 
        writeCSV(headList, valueList, fileName); 
        valueList.Clear(); 
        headList.Clear(); 
       } 
      } 
     } 

     public static void writeCSV(List<string> headList, List<string> valList, string fileName) 
     { 
      string headerString = ""; 
      string value = ""; 

      if (!File.Exists(fileName)) 
      { 
       foreach (var header in headList) 
       { 
        foreach (var val in valList) 
        { 
         value += val + ","; 
        } 
        oldHeadList.Add(header); 
        headerString += header + ','; 
       } 

       headerString += "+" + Environment.NewLine; 
       File.WriteAllText(fileName, headerString); 
      } 
      else 
      { 
       foreach (var header in headList) 
       { 
        foreach (var oldHeader in oldHeadList) 
        { 
         foreach (var val in valList) 
         { 
          if (header != oldHeader) 
          { 
           value += "null,"; 
          } 
          else 
          { 
           value += val + ","; 
          } 
         } 

        } 
       } 
      } 
      File.AppendAllText(fileName, value); 
      value += Environment.NewLine; 
     } 
    } 

,我不能为改变我的可怕的JSON文件的使用我公司:https://codeshare.io/rGL6K5

回答

0

有某种模式? 我问的原因是,也许你可以创建一个服务,将JSON序列化为一个复杂的对象。一旦完成了一个将该对象序列化为csv的服务。该服务将根据需要知道写入多个csv文件。

相关问题