Мне было интересно, если кто-то написал утилиту для преобразования CSV-файла в Json с помощью C#. Из предыдущего вопроса о stackoverflow я знаю эту приятную утилиту - https://github.com/cparker15/csv-to-json и на данный момент я планирую обратиться к ней, но существующая реализация C# будет очень полезна! Благодаря!Преобразование csv-файла в json с использованием C#
ответ
С этого same SO answer есть ссылка на this post.
метод CsvToJson продление
/// <summary>
/// Converts a CSV string to a Json array format.
/// </summary>
/// <remarks>First line in CSV must be a header with field name columns.</remarks>
/// <param name="value"></param>
/// <returns></returns>
public static string CsvToJson(this string value)
{
// Get lines.
if (value == null) return null;
string[] lines = value.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
if (lines.Length < 2) throw new InvalidDataException("Must have header line.");
// Get headers.
string[] headers = lines.First().SplitQuotedLine(new char[] { ',' }, false);
// Build JSON array.
StringBuilder sb = new StringBuilder();
sb.AppendLine("[");
for (int i = 1; i < lines.Length; i++)
{
string[] fields = lines[i].SplitQuotedLine(new char[] { ',', ' ' }, true, '"', false);
if (fields.Length != headers.Length) throw new InvalidDataException("Field count must match header count.");
var jsonElements = headers.Zip(fields, (header, field) => string.Format("{0}: {1}", header, field)).ToArray();
string jsonObject = "{" + string.Format("{0}", string.Join(",", jsonElements)) + "}";
if (i < lines.Length - 1)
jsonObject += ",";
sb.AppendLine(jsonObject);
}
sb.AppendLine("]");
return sb.ToString();
}
Там, как представляется, проблема с тем, где некоторые методы, вызываемые в пределах вышеуказанного расширения реального времени (см комментарии оригинальной записи в блоге), но вы должны получить большинство путь там.
EDITanother SO answer о разделении строки CSV. Вы можете использовать один из предложенных решений регулярных выражений, чтобы создать свой собственный SplitQuotedLine
метод:
public static string SplitQuotedLine(this string value, char separator, bool quotes) {
// Use the "quotes" bool if you need to keep/strip the quotes or something...
var s = new StringBuilder();
var regex = new Regex("(?<=^|,)(\"(?:[^\"]|\"\")*\"|[^,]*)");
foreach (Match m in regex.Matches(value)) {
s.Append(m.Value);
}
return s.ToString();
}
Я не тестировал выше, так что простите меня, если я сделал ошибку.
Кроме того, представляется, что Zip is a LINQ extension method, так что заботится об этой проблеме.
yes, но SplitQuotedLine - это определяемый пользователем метод, отсутствующий в сообщении в блоге – user1427026
Даже не видя, что происходит внутри этого метода, довольно легко сказать, что это просто разделение строки. 'Lines.First().Split (',') 'будет по существу делать то же самое - скорее всего, это просто тесты для любых цитируемых запятых и, возможно, также вытесняет цитаты. Расширение 'Zip' может быть немного больше, чтобы понять. Как я уже сказал, это дает вам большую часть пути. Наверное, вы ищете что-то 100%, хотя, поскольку вы новичок в C#, правильно? –
Несомненно, я надеюсь, что это сработает. Как я уже сказал, я просто привел пример, я не пробовал. Он должен работать, но может потребоваться небольшая настройка, но никаких гарантий! :) –
Если вы можете использовать System.Web.Extensions
, что-то подобное может работать:
var csv = new List<string[]>(); // or, List<YourClass>
var lines = System.IO.File.ReadAllLines(@"C:\file.txt");
foreach (string line in lines)
csv.Add(line.Split(',')); // or, populate YourClass
string json = new
System.Web.Script.Serialization.JavaScriptSerializer().Serialize(csv);
Вы могли бы иметь более сложные требования при разборе файла CSV, и вы могли бы иметь класс, который инкапсулирует данные из одной строки, но Дело в том, что вы можете сериализоваться в JSON с одной строкой кода, когда у вас есть коллекция строк.
В основном это результат ошибки, если файл огромен. Пример: ошибка при сериализации или десериализации с использованием JSON JavaScriptSerializer. Длина строки превышает значение, установленное на свойстве maxJsonLength – Kurkula
Я искал ответ на этот вопрос, в конце концов я решил его с помощью словаря
public static void CreateJsonFromCSV()
{
string path = "C:\\Users\\xx\\xx\\xx\\xx\\lang.csv";
string textFilePath = path;
const Int32 BufferSize = 128;
using (var fileStream = File.OpenRead(textFilePath))
using (var streamReader = new StreamReader(fileStream, Encoding.UTF8, true, BufferSize))
{
String line;
Dictionary<string, string> jsonRow = new Dictionary<string, string>();
while ((line = streamReader.ReadLine()) != null)
{
string[] parts = line.Split(',');
string key_ = parts[0];
string value = parts[1];
if (!jsonRow.Keys.Contains(key_))
{
jsonRow.Add(key_, value);
}
}
var json = new JavaScriptSerializer().Serialize(jsonRow);
string path_ = "C:\\XX\\XX\\XX\\XX\\XX.csv";
File.WriteAllText(path_, json);
}
}
, вы Anak ... – Leon
Убедитесь, что вы добавить ниже в web.config, прежде чем вы разобрать больших CSV-файлов.
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
Cinchoo ETL - открытая библиотека источника доступны для выполнения преобразования CSV в формате JSON легко с несколькими строками кода
using (var p = new ChoCSVReader("sample.csv").WithFirstLineHeader())
{
using (var w = new ChoJSONWriter("sample.json"))
{
w.Write(p);
}
}
заказ CodeProject статьи для некоторой дополнительной помощи.
Отказ от ответственности: Я являюсь автором этой библиотеки.
- 1. Преобразование JSON в XML с использованием JavaScriptSerializer в C#
- 2. Преобразование JSON в C# в объект с использованием JsonConvert
- 3. Преобразование CSV в JSON с использованием PHP
- 4. Преобразование сложных JSON на объект в C# с использованием newtonsoft
- 5. Преобразование данных в иерархическую структуру данных (JSON) с использованием C#
- 6. C# Преобразование массива Json в строковый массив с использованием Json.Net
- 7. Преобразование карты в JSON с использованием Jackson
- 8. Преобразование файла в JSON с использованием JWPlayer
- 9. Преобразование URI в JSON с использованием JQuery
- 10. Преобразование QueryString в Json с использованием JAVA
- 11. Преобразование JSON в POJO с использованием JAXB
- 12. Преобразование JSON в CSV с использованием Java
- 13. Преобразование Hashmap в JSON с использованием GSON
- 14. Преобразование даты в JSON с использованием jquery
- 15. Преобразование XML в JSON с использованием xml_parse_into_struct
- 16. Преобразование XML в JSON с использованием R
- 17. Преобразование xml в json с использованием jackson
- 18. Преобразование XML в JSON с использованием perl
- 19. Преобразование JSONObject в JSON с использованием GSON
- 20. Преобразование JSON в Avro с использованием Java
- 21. Преобразование JSON в словаре C#
- 22. Преобразование JSON строки в C#
- 23. Преобразование JSON и построение словаря с использованием Objective C
- 24. Преобразование JSON в C# Тип
- 25. C# JSON newtonsoft преобразование
- 26. Преобразование JSON в байтовый массив в C
- 27. Преобразование Json с динамическим свойством в C#
- 28. Преобразование JSON в XML с помощью C#
- 29. Преобразование пользовательского объекта в JSON с использованием JSON gem
- 30. Преобразование JSON в строку C#
Вы можете легко транслитерировать этот код JS на C#, вы также можете оставить в словах 'var'. – tlehman
Да, это то, что я планировал сделать, но единственная статья, которую я мог найти, это в msdn http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/b6e8a28c-6760-4e86 -a1aa-e2ce9ec36380/использует Office.Interop, и я новичок на C# и не очень хорошо знаком с ним. Нужно ли мне использовать его или должно быть хорошо пытаться перевести утилиту js? Благодаря! – user1427026
Я бы не использовал Office.Interop в CSV-файле, это было бы излишним, поскольку CSV - это просто текст. – tlehman