【问题标题】:c# convert json string to .csvc# 将json字符串转换为.csv
【发布时间】:2019-05-13 21:53:39
【问题描述】:

我正在尝试将包含数组元素的 json 字符串转换为 .csv 文件。下面是json字符串格式:

{"inputFile": [["Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10"], ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"], ["K", "L", "M", "N", "O", "P", "Q", "R", "S", "T"]]}

解决了。谢谢嘿现在。

            dynamic dynObj = JsonConvert.DeserializeObject(json);
            var rowElements = new List<string>();

            foreach (var data in dynObj.inputFile)
            {
                var row = new List<string>();
                foreach (var dataItem in data)
                {
                    var item = Convert.ToString(dataItem);
                    row.Add(item);
                }

                rowElements.Add( String.Join(",", row)+"\n");
            }
            var CSV = String.Join("",rowElements);
            Console.WriteLine(CSV);

For RaJN:
Updated code to replace json file path to json string:

        StringBuilder msg = new StringBuilder();
        using (var p = ChoJSONReader.LoadText(jsonString)
            .WithJSONPath("$.inputFile[*]")
            )
        {
            using (var w = new ChoCSVWriter(msg))
            {
                w.Write(p);
            }
            Console.WriteLine(msg.ToString());
        }

【问题讨论】:

  • 首先告诉我们你没有运气对任何人都没有任何意义,其次反序列化一个 json 字符串是 C# 的 stackoverflow 上最常见的问题之一,你研究了什么,为什么没有有用吗?
  • 你说:“没有运气”....这对我们没有帮助。你遇到什么错误!!!我们无法以这种方式帮助您

标签: c# json csv choetl


【解决方案1】:

尝试使用 newtonsoft jsonparser。
如果您可以将 JSON 作为字符串获取..

dynamic dynObj = JsonConvert.DeserializeObject(jsonString);

string CSV = "";

foreach (var data in dynObj.inputFile)
{
    List<string> row = new List<string>();

    foreach(var dataItem in data)
    {
        row.Add(dataItem);
    }

    CSV+=string.Join(row, ",");
}

您将获得 1 个包含所有值的 CSV 巨型字符串。 让我们知道这是否是您想要的。

【讨论】:

  • 谢谢 heyNow。更新了代码以使其适合我:dynamic dynObj = JsonConvert.DeserializeObject(json); var rowElements = new List&lt;string&gt;(); foreach (var data in dynObj.inputFile) { var row = new List&lt;string&gt;(); foreach (var dataItem in data) { var item = Convert.ToString(dataItem); row.Add(item); } rowElements.Add( String.Join(",", row)+"\n"); } var CSV = String.Join("",rowElements);
【解决方案2】:

以下是使用Cinchoo ETL从 JSON 文件生成 CSV 的方法

        StringBuilder msg = new StringBuilder();
        using (var p = new ChoJSONReader("*** YOUR JSON FILE PATH ***")
            .WithJSONPath("$.inputFile[*]")
            )
        {
            using (var w = new ChoCSVWriter(msg))
            {
                w.Write(p);
            }
            Console.WriteLine(msg.ToString());
        }

输出:

Column1,Column2,Column3,Column4,Column5,Column6,Column7,Column8,Column9,Column10
A,B,C,D,E,F,G,H,I,J
K,L,M,N,O,P,Q,R,S,T

更新:

            string json = @"
{
  ""inputFile"": [
    [""Column1"", ""Column2"", ""Column3"", ""Column4"", ""Column5"", ""Column6"", ""Column7"", ""Column8"", ""Column9"", ""Column10""],
    [ ""A"", ""B"", ""C"", ""D"", ""E"", ""F"", ""G"", ""H"", ""I"", ""J"" ],
    [ ""K"", ""L"", ""M"", ""N"", ""O"", ""P"", ""Q"", ""R"", ""S"", ""T"" ]
  ]
}";

            StringBuilder msg = new StringBuilder();
            using (var p = ChoJSONReader.LoadText(json)
                .WithJSONPath("$.inputFile[*]")
                )
            {
                using (var w = new ChoCSVWriter(msg))
                {
                    w.Write(p);
                }
                Console.WriteLine(msg.ToString());
            }

【讨论】:

  • 我又试了一次,但它给了我一个Failed to assign 'System.Object[]' fallback value to 'Value' field. 我从你的代码中改变的一件事是我没有传递一个 json 文件路径,而是传递一个 json 字符串。 using(var p = ChoJsonReader.LoadText(jsonString).WithJSONPath("$.inputFile[*]))
  • 我无法重现错误。编辑您的问题并在那里添加您的代码。
  • @Cinchoo as discussed previously 在向他人推广自己的代码作为解决方案时,您应该披露您与库的关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多