c # конвертировать строку json в .csv - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь преобразовать строку 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());
        }

Ответы [ 2 ]

1 голос
/ 14 мая 2019

попробуйте с помощью 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.Дайте нам знать, если вы этого хотите.

0 голосов
/ 15 мая 2019

Вот как вы можете сгенерировать CSV из вашего файла JSON, используя Cinchoo ETL

        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

UPDATE:

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