Member 13458399 Ответов: 2

Как конвертировать json-файл в csv-файл в C#?


Это мой json файл :
{
    "imgHeight": 1840,
    "imgWidth": 2452,
    "objects": [
        {
            "date": "06-Nov-2017 14:42:59",
            "deleted": 0,
            "draw": true,
            "id": 0,
            "label": "Unlabeled",
            "polygon": [
                [
                    1860.4728789986093,
                    0.0
                ],
                [
                    1599.4436717663423,
                    307.0931849791377
                ],
                [
                    1591.7663421418638,
                    304.53407510431157
                ],
                [
                    1581.5299026425591,
                    317.32962447844227
                ],
                [
                    1566.1752433936022,
                    319.88873435326843
                ],
                [
                    1520.1112656467317,
                    373.6300417246175
                ],
                
                [
                    1417.7468706536856,
                    419.69401947148816
                ],
                [
                    1422.865090403338,
                    427.37134909596665
                ],
                [
                    1427.9833101529903,
                    440.16689847009735
                ],
                [
                    1399.8331015299027,
                    483.6717663421419
                ],
                [
                    1376.8011126564672,
                    519.4993045897079
                ],
                [
                    1384.4784422809457,
                    522.058414464534
                ],
                [
                    1384.4784422809457,
                    616.7454798331015
                ],
               
                [
                    762.614742698192,
                    360.8344923504868
                ],
                [
                    396.66203059805287,
                    92.12795549374131
                ],
                [
                    396.66203059805287,
                    71.65507649513214
                ],
                
                [
                    335.2433936022253,
                    0.0
                ]
            ],
            "user": "Rashmitha",
            "verified": 0
        },


я должен конвертировать в csv-файл. На самом деле основная задача состоит в том, чтобы преобразовать json в шейп-файл, но у меня уже есть решение csv для shape, поэтому я просто хочу конвертировать в csv.

в этом файле мне нужно только :
идентификатор:
этикетка:
полигон:
пользователь:
в моем csv-файле.

Что я уже пробовал:

public class Object
        {
            public string date { get; set; }
            public int deleted { get; set; }
            public bool draw { get; set; }
            public int id { get; set; }
            public string label { get; set; }
            public List<List<double>> polygon { get; set; }
            public string user { get; set; }
            public int verified { get; set; }
        }

        public class RootObject
        {
            public int imgHeight { get; set; }
            public int imgWidth { get; set; }
            public List<object> objects { get; set; }
        }

        static void Main(string[] args)
        {
            using (StreamReader r = new StreamReader(@"D:\New_Task\000\_cam1_1509438801455_000004.json"))
            {
                string json = r.ReadToEnd();
                var data = JsonConvert.DeserializeObject<rootobject>(json);
               
              jsonStringToCSV(json);        
               
            }
        }
        public static void jsonStringToCSV(string jsonContent)
        {
            //used NewtonSoft json nuget package
            XmlNode xml = JsonConvert.DeserializeXmlNode("{records:{record:" + jsonContent + "}}");
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.LoadXml(xml.InnerXml);
            XmlReader xmlReader = new XmlNodeReader(xml);
            DataSet dataSet = new DataSet();
            dataSet.ReadXml(xmlReader);
            var dataTable = dataSet.Tables[1];

            //Datatable to CSV
            var lines = new List<string>();
            string[] columnNames = dataTable.Columns.Cast<datacolumn>().
                                              Select(column => column.ColumnName).
                                              ToArray();
            var header = string.Join(",", columnNames);
            lines.Add(header);
            var valueLines = dataTable.AsEnumerable()
                               .Select(row => string.Join(",", row.ItemArray));
            lines.AddRange(valueLines);
            File.WriteAllLines(@"D:\New_Task\000\_cam1_1509438801455_000004.csv", lines);
        }

2 Ответов

Рейтинг:
5

Perić Željko

Привет,
Вот то, что может помочь вам решить эту проблему.
Программный код использует отличный Newtonsoft Json.Сеть для манипулирования документами Json.
По ссылке ниже вы можете скачать его и узнать, как им пользоваться :

Json.NET - Newtonsoft[^]

Вот программный код :

void Json_To_Csv(string Json)
{

    JObject JSON = new JObject();

    JSON = JObject.Parse(Json);


    foreach (var objects in JSON["objects"])
    {
        MessageBox.Show(objects["id"].ToString());

        MessageBox.Show(objects["label"].ToString());

        foreach (var polygon in objects["polygon"])
        {
            MessageBox.Show(polygon[0].ToString());

            MessageBox.Show(polygon[1].ToString());
        }

        MessageBox.Show(objects["user"].ToString());
    }

}


И не забывайте использовать директивы :

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;


Всего наилучшего,
Желько Перич


Рейтинг:
1

Graeme_Grant

Поиск в Google обычно дает ответы на все вопросы. Я использовал этот поиск: json в csv[^] и нашел это решение:

Преобразование строк JSON в CSV и CSV в JSON в c# - переполнение стека[^]