我想知道是否有人編寫了一個實用程序來使用C#將CSV文件轉換爲Json。從上一個關於stackoverflow的問題,我知道這個很好用的工具 -,此刻我打算引用它,但現有的C#實現將非常有幫助!謝謝!使用C#將csv文件轉換爲json#
回答
從那same SO answer,有一個鏈接到this post。
CsvToJson extention方法
/// <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();
}
有似乎是其中一些方法稱爲上面延伸直播中(見原博客文章的評論)的問題,但它應該讓你最那裏的路。
編輯這是關於分割CSV行的another SO answer。您可以使用正則表達式建議的解決方案之一,以創建自己的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,以便照顧這個問題。
是的,但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 - 提供一個開放源碼庫的幾行代碼
using (var p = new ChoCSVReader("sample.csv").WithFirstLineHeader())
{
using (var w = new ChoJSONWriter("sample.json"))
{
w.Write(p);
}
}
結帳CodeProject上的文章對一些額外的幫助做CSV轉化爲JSON容易。
聲明:我是該庫的作者。
- 1. Python - 將csv文件轉換爲JSON
- 2. 使用Python(空閒)將JSON *文件*轉換爲CSV *文件*
- 3. 想要使用Golang將json文件轉換爲csv文件
- 4. C#將csv轉換爲xls(使用現有的csv文件)
- 5. 使用PowerShell將CSV轉換爲JSON和JSON爲CSV
- 6. 使用PHP將CSV轉換爲JSON
- 7. 使用json2csv.py將JSON轉換爲CSV
- 8. 使用python將csv轉換爲json
- 9. 使用熊貓將JSON轉換爲CSV
- 10. 使用jq將JSON轉換爲CSV
- 11. 使用PHP將CSV轉換爲JSON?
- 12. 使用Python將JSON轉換爲CSV 3
- 13. 使用Python將JSON轉換爲CSV
- 14. 使用python將json轉換爲csv
- 15. 使用java將JSON轉換爲CSV
- 16. 使用PHP將json轉換爲CSV
- 17. 在C++中將JSON轉換爲CSV
- 18. 使用Apache NiFi將CSV文件轉換爲JSON
- 19. 如何使用Node.js將CSV文件轉換爲JSON腳本?
- 20. 使用SSIS中的powershell將JSON文件轉換爲CSV
- 21. 如何使用python將大型Json文件轉換爲csv
- 22. 無法使用Python將JSON文件轉換爲CSV
- 23. 使用文件上傳將CSV轉換爲JSON
- 24. 將JSON流轉換爲CSV
- 25. 將CSV轉換爲JSON
- 26. 將JSON轉換爲CSV
- 27. 將JSON轉換爲CSV
- 28. 將JSON轉換爲CSV
- 29. 使用JWPlayer將文件轉換爲JSON
- 30. 使用c將csv文件轉換爲html時出錯#
您可以輕鬆地將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
我會避免使用CSV文件上的Office.Interop,這將是過度殺傷,因爲CSV只是文本。 – tlehman