将CSV数据转换为JSON -CSVHELPER

发布于 2025-02-11 20:34:44 字数 3016 浏览 1 评论 0原文

我的数据在Excel中:

“在此处输入映像说明”

id  _npi_link_id    dtime   _dow    congestion_cost vkt _delay_time vol _type   anes    length  eed_lim v_speed
4706    3372355 1   2   0   2.08    0   11  Council Arterial    3   189 50  45.44
4708    3372355 1   2   0   0.38    0   2   Council Arterial    3   189 50  48

我试图将ID分开并将其余数据分开为JSON..I遵循这个示例,但我在JSON中获得了空的费用。

我的代码:

csvhelper_sample

public class GeoFeatures
{
    public string? id { get; set; }
    public Json? Json { get; set; }
}

public class Json
{
    public string? GeoFeatures { get; set; }
}

public class FooMap : ClassMap<GeoFeatures>
{
    public FooMap()
    {
        Map(m => m.id);
        Map(m => m.Json).TypeConverter<JsonConverter<Json>>();
    }
}

public class JsonConverter<T> : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        return JsonConvert.DeserializeObject<T>(text);
    }

    public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
    {
        return JsonConvert.SerializeObject(value);
    }
}

program.cs

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
  IgnoreBlankLines = true,
  HasHeaderRecord = true,  
  HeaderValidated = null,
  MissingFieldFound = null,
  ShouldSkipRecord = record => string.IsNullOrEmpty(record.ToString()),
};

using (var reader = new StreamReader("Z:\\tmp\\test3.csv"))
using (var csv = new CsvReader(reader, config))
{
  csv.Read();
  csv.ReadHeader();
  var list = csv.GetRecords<GeoFeatures>().ToList();

  Console.WriteLine(list.Count);
} 

尝试2

我也尝试了一个变体,但仅获取每个ID记录。

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
  IgnoreBlankLines = true,
  HasHeaderRecord = true,  
  HeaderValidated = null,
  MissingFieldFound = null,
  ShouldSkipRecord = record => string.IsNullOrEmpty(record.ToString()),
};

using (var reader = new StreamReader("Z:\\tmp\\test3.csv"))
using (var csv = new CsvReader(reader, config))
{
    csv.Read();
    csv.ReadHeader();
    var length = csv.HeaderRecord.Count();

    while (csv.Read())
    {
       var record = csv.GetRecord<dynamic>();

       // Do something with the record.
       Console.WriteLine(record.id);
    }
}

My data in excel:

enter image description here

id  _npi_link_id    dtime   _dow    congestion_cost vkt _delay_time vol _type   anes    length  eed_lim v_speed
4706    3372355 1   2   0   2.08    0   11  Council Arterial    3   189 50  45.44
4708    3372355 1   2   0   0.38    0   2   Council Arterial    3   189 50  48

I am trying to parse id separate and rest of the data as json..I followed this example but I get empty feilds in Json.

enter image description here

My code:

CSVHelper_Sample

public class GeoFeatures
{
    public string? id { get; set; }
    public Json? Json { get; set; }
}

public class Json
{
    public string? GeoFeatures { get; set; }
}

public class FooMap : ClassMap<GeoFeatures>
{
    public FooMap()
    {
        Map(m => m.id);
        Map(m => m.Json).TypeConverter<JsonConverter<Json>>();
    }
}

public class JsonConverter<T> : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
    {
        return JsonConvert.DeserializeObject<T>(text);
    }

    public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
    {
        return JsonConvert.SerializeObject(value);
    }
}

Program.cs

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
  IgnoreBlankLines = true,
  HasHeaderRecord = true,  
  HeaderValidated = null,
  MissingFieldFound = null,
  ShouldSkipRecord = record => string.IsNullOrEmpty(record.ToString()),
};

using (var reader = new StreamReader("Z:\\tmp\\test3.csv"))
using (var csv = new CsvReader(reader, config))
{
  csv.Read();
  csv.ReadHeader();
  var list = csv.GetRecords<GeoFeatures>().ToList();

  Console.WriteLine(list.Count);
} 

Try 2

I have also tried a variation but only get id for each record.

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
  IgnoreBlankLines = true,
  HasHeaderRecord = true,  
  HeaderValidated = null,
  MissingFieldFound = null,
  ShouldSkipRecord = record => string.IsNullOrEmpty(record.ToString()),
};

using (var reader = new StreamReader("Z:\\tmp\\test3.csv"))
using (var csv = new CsvReader(reader, config))
{
    csv.Read();
    csv.ReadHeader();
    var length = csv.HeaderRecord.Count();

    while (csv.Read())
    {
       var record = csv.GetRecord<dynamic>();

       // Do something with the record.
       Console.WriteLine(record.id);
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文