Напишите столбцы с неравной длиной в CSV

2

Я deserialized JSON файл со следующей структурой данных в С#

[DataContract]
public class SentimentData
{
    [DataMember(Name ="Column1")]
    public IEnumerable<string> Column1 { get; set; }

    [DataMember(Name ="Column-2")]
    public IEnumerable<string> Column2 { get; set; }
}

Граф столбца1 не равен счету столбца2. Я просто хочу в основном сбросить все данные в столбце1 в первом столбце и данные столбца2 во втором столбце. Я пробовал следующее, но не работал.

using (var writer = new StreamWriter(@"C:\test.csv"))
{
    var nr = column1data.Select(y => new { Column1= y }).ToList();
    //var nnr = column2data.Select(y => new { Column2 = y }).ToList();

    var csv = new CsvWriter(writer);
    csv.WriteRecords(nr);
    //csv.WriteRecords(nnr);
    writer.Flush();
}

Кто-нибудь может знать, как это сделать?

образец json:

{
  "Negative": [
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt"
  ],
  "Non-Negative": [
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt",
    "a.txt",
    "b.txt"
  ]
}
  • 1
    Может помочь: stackoverflow.com/questions/1190657/…
  • 0
    @Nkosi я добавил образец JSON. мне нужен формат как Column1 | Столбец2. Если вы видите здесь нет. записей в Column2 больше
Показать ещё 3 комментария
Теги:
csvhelper

2 ответа

3
Лучший ответ

Следуя модифицированной версии кода для по умолчанию Enumerable.Zip

Выведено следующее расширение, позволяющее засеять коллекции неравных длин

public static class MyEnumerablExtensions {

    public static IEnumerable<TResult> ZipOrDefault<TFirst, TSecond, TResult>(this IEnumerable<TFirst> first, IEnumerable<TSecond> second, Func<TFirst, TSecond, TResult> resultSelector) {
        if (first == null) throw Error.ArgumentNull("first");
        if (second == null) throw Error.ArgumentNull("second");
        if (resultSelector == null) throw Error.ArgumentNull("resultSelector");
        using (IEnumerator<TFirst> e1 = first.GetEnumerator()) {
            using (IEnumerator<TSecond> e2 = second.GetEnumerator()) {
                while (e1.MoveNext()) {
                    if (e2.MoveNext()) {
                        yield return resultSelector(e1.Current, e2.Current);
                    } else {
                        yield return resultSelector(e1.Current, default(TSecond));
                    }
                }
                while (e2.MoveNext()) {
                    yield return resultSelector(default(TFirst), e2.Current);
                }
            }
        }
    }
    class Error {
        public static Exception ArgumentNull(string parameter) {
            return new ArgumentNullException(parameter);
        }
    }
}

Это позволит вам создать желаемую объектную модель, которая затем может быть записана в CSV-запись

using (var writer = new StreamWriter(@"C:\test.csv")) {
    var records = column1data.ZipOrDefault(column2data, 
        (Column1, Column2) => new { Column1, Column2 });

    var csv = new CsvWriter(writer);
    csv.WriteRecords(records);
    writer.Flush();
}
  • 0
    классно. благодарю вас.
-1

Попробовать newtonsoft json.net

Установите его как

install-package newtonsoft.json

Это работает для меня:

static class Program
{
   static void Main()
   {
            var json = "{ \"Negative\": [ \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\" ], \"Non-Negative\": [ \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\", \"a.txt\", \"b.txt\" ] }";
            var classObject = JsonConvert.DeserializeObject<RootObject>(json);
    }
}

public class RootObject
{
   public List<string> Negative { get; set; }

   [JsonProperty("Non-Negative")]
   public List<string> NonNegative { get; set; }
}}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню