当前位置:  开发笔记 > 编程语言 > 正文

cSON中的JSON字符串到CSV和CSV到JSON的转换

如何解决《cSON中的JSON字符串到CSV和CSV到JSON的转换》经验,为你挑选了2个好方法。

我在我的asp.net web API项目中使用JSON/CSV文件,并尝试使用CSVHelper和ServiceStack.Text库,但无法使其工作.

包含数组的JSON文件是动态的,可能包含任意数量的字段

我使用streamreader读取文件,然后需要将其转换为CSV文件,以便最终用户下载.

示例文件文本

[{"COLUMN1":"a","COLUMN2":"b","COLUMN3":"c","COLUMN4":"d","COLUMN5":"e"},
 {"COLUMN1":"a","COLUMN2":"b","COLUMN3":"c","COLUMN4":"d","COLUMN5":"e"}]

JSON到CSV

public static string jsonStringToCSV(string content)
{
    var jsonContent = (JArray)JsonConvert.DeserializeObject(content);

    var csv = ServiceStack.Text.CsvSerializer.SerializeToCsv(jsonContent);
    return csv;
}

这不会导致我的CSV数据

在此输入图像描述

然后一些文件是带有逗号或制表符的分隔符类型,我想利用CSVHelper将CSV字符串动态转换为IEnumerable

public static IEnumerable StringToList(string data, string delimiter, bool HasHeader)
{
    using (var csv = new CsvReader(new StringReader(data)))
    {
         csv.Configuration.SkipEmptyRecords = true;
         csv.Configuration.HasHeaderRecord = HasHeader;
         csv.Configuration.Delimiter = delimiter;

         var records = csv.GetRecords();
         return records;
     }
}

Priyanka Rat.. 35

我能够通过DeserializeObject将其解析为使用Json.net的数据表,所以想要发布我自己的答案但不会将其标记为已接受,如果有人有更好的方法来做到这一点.

将JSON字符串转换为DataTable

public static DataTable jsonStringToTable(string jsonContent)
        {
            DataTable dt = JsonConvert.DeserializeObject(jsonContent);
            return dt;
        }

制作CSV字符串

public static string jsonToCSV(string jsonContent, string delimiter)
        {
            StringWriter csvString = new StringWriter();
            using (var csv = new CsvWriter(csvString))
            {
                csv.Configuration.SkipEmptyRecords = true;
                csv.Configuration.WillThrowOnMissingField = false;
                csv.Configuration.Delimiter = delimiter;

                using (var dt = jsonStringToTable(jsonContent))
                {
                    foreach (DataColumn column in dt.Columns)
                    {
                        csv.WriteField(column.ColumnName);
                    }
                    csv.NextRecord();

                    foreach (DataRow row in dt.Rows)
                    {
                        for (var i = 0; i < dt.Columns.Count; i++)
                        {
                            csv.WriteField(row[i]);
                        }
                        csv.NextRecord();
                    }
                }
            }
            return csvString.ToString();
        }

Web API中的最终用法

string csv = jsonToCSV(content, ",");

                HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
                result.Content = new StringContent(csv);
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "export.csv" };
                return result;


RajN.. 16

我不知道为你的问题报告解决方案是否为时已晚.如果您想要探索开源库来完成这项工作,以下是其中之一

Cinchoo ETL使用几行代码轻松地将JSON转换为csv

using (var r = new ChoJSONReader("sample.json"))
{
    using (var w = new ChoCSVWriter("sample.csv").WithFirstLineHeader())
    {
        w.Write(r);
    }
}

有关更多信息/来源,请访问https://github.com/Cinchoo/ChoETL

Nuget套餐:

.NET Framework:

      Install-Package ChoETL.JSON

.NET核心:

      Install-Package ChoETL.JSON.NETStandard

完全披露:我是这个图书馆的作者.



1> Priyanka Rat..:

我能够通过DeserializeObject将其解析为使用Json.net的数据表,所以想要发布我自己的答案但不会将其标记为已接受,如果有人有更好的方法来做到这一点.

将JSON字符串转换为DataTable

public static DataTable jsonStringToTable(string jsonContent)
        {
            DataTable dt = JsonConvert.DeserializeObject(jsonContent);
            return dt;
        }

制作CSV字符串

public static string jsonToCSV(string jsonContent, string delimiter)
        {
            StringWriter csvString = new StringWriter();
            using (var csv = new CsvWriter(csvString))
            {
                csv.Configuration.SkipEmptyRecords = true;
                csv.Configuration.WillThrowOnMissingField = false;
                csv.Configuration.Delimiter = delimiter;

                using (var dt = jsonStringToTable(jsonContent))
                {
                    foreach (DataColumn column in dt.Columns)
                    {
                        csv.WriteField(column.ColumnName);
                    }
                    csv.NextRecord();

                    foreach (DataRow row in dt.Rows)
                    {
                        for (var i = 0; i < dt.Columns.Count; i++)
                        {
                            csv.WriteField(row[i]);
                        }
                        csv.NextRecord();
                    }
                }
            }
            return csvString.ToString();
        }

Web API中的最终用法

string csv = jsonToCSV(content, ",");

                HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
                result.Content = new StringContent(csv);
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "export.csv" };
                return result;



2> RajN..:

我不知道为你的问题报告解决方案是否为时已晚.如果您想要探索开源库来完成这项工作,以下是其中之一

Cinchoo ETL使用几行代码轻松地将JSON转换为csv

using (var r = new ChoJSONReader("sample.json"))
{
    using (var w = new ChoCSVWriter("sample.csv").WithFirstLineHeader())
    {
        w.Write(r);
    }
}

有关更多信息/来源,请访问https://github.com/Cinchoo/ChoETL

Nuget套餐:

.NET Framework:

      Install-Package ChoETL.JSON

.NET核心:

      Install-Package ChoETL.JSON.NETStandard

完全披露:我是这个图书馆的作者.


了解.仅供参考,它是一个开源库,展示了如何使用它来解决问题.没有比这更好的了.
推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有