Search code examples
c#jsoncsvchoetl

c# convert json string to .csv


I am trying to convert a json string, containing array elements, to a .csv file. Below is the json string format:

{"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"]]}

solved. Thanks heyNow.

            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());
        }

Solution

  • try with newtonsoft jsonparser.
    If you can get your JSON as a string..

    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, ",");
    }
    

    You will get 1 giant string containing all the values as a CSV. Let us know if this is what you want.