我正在使用的API中的一个函数基本上只返回一大块文本,用分号分隔每个键/值。我如何在C#中解析这样的文本?
结果=成功; income_today =; income_thismonth =; income_thisyear =; orders_pending = 19; orders_today_cancelled = 0; orders_today_pending = 0; orders_today_fraud = 0; orders_today_active = 0; orders_today_total = 0; orders_yesterday_cancelled = 0; orders_yesterday_pending = 3; orders_yesterday_fraud = 2; orders_yesterday_active = 0;
答案 0 :(得分:13)
嗯,这看起来像是:
text.Split(';')
将块拆分为键值对pair.Split('=')
将其拆分为键和值请注意,string.Split
有各种重载,您可能希望查看有关要返回的字符串数量的选项,是否抑制空值等。
答案 1 :(得分:1)
我最近遇到过类似的问题。这是一段可能对您有用的代码。策略与Jon Skeet's anwers中的策略相同。
看起来这些键在您的文本块中是唯一的,因此您可以使用Dictionary
string[] pairs = block.Split(';');
Dictionary<string, string> values = new Dictionary<string, string>();
foreach (var element in pairs)
{
var tmp = element.Split('=');
var key = tmp[0];
var val = tmp.Length == 2 ? tmp[1] : string.Empty;
values.Add(key,val );
}
foreach (var el in values)
{
Console.WriteLine(el);
}
答案 2 :(得分:1)
这里是单行(为清晰起见,格式化为多行)。
Dictionary<string, string> dictionary = raw
.Split(new [] { ';', }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => x.Split('='))
.ToDictionary(x => x[0], x => x[1]);
答案 3 :(得分:0)
我会使用String.Split(Char[])。调整示例,您需要string [] split = words.Split(new Char [] {';'});