Luiey Ichigo Ответов: 1

Преобразование заголовка и значения данных CSV в формат JSON


Привет,


Как преобразовать значение и заголовок извлечения из CSV в формат JSON? В настоящее время я добавляю данные из заголовка, объединяю их с содержимым строки и соединяю с другим столбцом.

Ниже приведено то, что я делаю:-

Imports LumenWorks.Framework.IO.Csv

Private Async Function ReadFromCSV() As Task
    Try
        Using csv As New CsvReader(New StreamReader("E:\DATA\Data001.csv"), True)
            csv.DefaultParseErrorAction = ParseErrorAction.RaiseEvent
            AddHandler csv.ParseError, AddressOf csv_ParseError
            Dim fieldCount As Integer = csv.FieldCount
            Dim headers() As String = csv.GetFieldHeaders()
            Do While csv.ReadNextRecord()
                For i As Integer = 0 To fieldCount - 1
                    Console.Write(String.Format("{0}:{1};", headers(i), csv(i)))
                Next i
                Console.WriteLine()
            Loop
        End Using
        Await Task.Delay(5000)
    Catch ex As Exception
        Console.WriteLine("{0} > Sending message failed. Ex - {1}", DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss:fff"), ex.Message)
    End Try
End Function

Кроме того, я хочу, чтобы его можно было отправить в центр Интернета вещей. Так что я воображаю:-

Dim telemetryDataPoint = New With {Key .csv_header(i) = csv_value(i)}


После того, как я динамически добавляю в JSON, как динамически зацикливаться на Новый С Ключом {}? Потому что в настоящее время я использую ручную запись. В будущем появится еще несколько CSV-файлов с динамическим количеством заголовков. например, File001.csv имеет 7 заголовков, File002.csv-16 заголовков. Итак, существует ли возможная функция 1, чтобы перевести ее в динамическое создание объекта?

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

Использование csv в качестве нового CsvReader(New StreamReader("E:\DATA\Data001.csv"), правда)
CSV-файл.DefaultParseErrorAction = ParseErrorAction.оператор RaiseEvent
Addhandler в формате CSV.ParseError, оператором addressof csv_ParseError
Дим fieldCount как целое число = формат CSV.FieldCount
Дим заголовки() как строка = формат CSV.GetFieldHeaders()
Делать при CSV-файл.ReadNextRecord()
Для i As Integer = 0 To fieldCount - 1
Приставка.Write(String.Формат("{0}:{1};", заголовки (i), csv (i)))
Далее я
Приставка.метод WriteLine()
Петля
Конец Использования

1 Ответов

Рейтинг:
8

Richard Deeming

Если вы еще этого не сделали, используйте NuGet, чтобы добавить ссылку на Json.NET[^]:

Install-Package Newtonsoft.Json

Импортируйте пространство имен LINQ в JSON:
Imports Newtonsoft.Json.Linq

Тогда использовать JArray[^], Создание экземпляра[^] и JProperty[^] чтобы построить свои объекты:
Dim fieldCount As Integer = csv.FieldCount
Dim headers() As String = csv.GetFieldHeaders()
Dim jsonData As New JArray()

Do While csv.ReadNextRecord()
    Dim record As New JObject()
    
    For i As Integer = 0 To fieldCount - 1
        record.Add(New JProperty(headers(i), csv(i)))
    Next
    
    jsonData.Add(record)
Loop

Console.WriteLine(jsonData);

Создание JSON[^]


Luiey Ichigo

Привет Ричард,

Спасибо за проводника. Это работа и идеальная встреча!