提取键值对
本文关键字:键值对 提取 | 更新日期: 2023-09-27 17:50:35
我正在研究Rest api。它工作得很好。当我请求它时,它会给我一个响应。实际上,这个响应是一个由子数组和其中的键值对组成的数组。现在我想在c#中提取这些键:值对。我想到了正则表达式来提取子字符串,但我还不知道正则表达式。但我尝试先得到子数组,如。
输入字符串
[
{
"id": "1",
"name": "kashif",
"father_name": "mirza",
"contact": "21321",
"email": "sdf",
"image": "sdfsdf"
},
{
"id": "2",
"name": "Kashif",
"father_name": "Mirza",
"contact": "0342809211",
"email": "shadbagh@wele.com",
"image": "photo[1].jpg"
},
{
"id": "3",
"name": "Abdussadiq",
"father_name": "Abdul Haq Khan",
"contact": "03449066113",
"email": "abdus.sadiq04@gmail.com",
"image": "1393602_698558840157121_1872079026_n.jpg"
}
]
regex
c#代码 Match match = Regex.Match(input, @"(?<='{)(.*)(?='})",
RegexOptions.IgnoreCase);
if (match.Success)
{
foreach(var matchgroup in match.Groups)
Console.WriteLine(matchgroup);
}
它返回给我结果,但不是根据我的需要。它返回我像
"id": "1",
"name": "kashif",
"father_name": "mirza",
"contact": "21321",
"email": "sdf",
"image": "sdfsdf"
},
{
"id": "2",
"name": "Kashif",
"father_name": "Mirza",
"contact": "0342809211",
"email": "shadbagh@wele.com",
"image": "photo[1].jpg"
},
{
"id": "3",
"name": "Abdussadiq",
"father_name": "Abdul Haq Khan",
"contact": "03449066113",
"email": "abdus.sadiq04@gmail.com",
"image": "1393602_698558840157121_1872079026_n.jpg"
这意味着它只删除了外括号而不删除内括号
我的问题是:
- 我在上面的代码做错了什么?
- 如果我必须得到键:值对那么我还需要做什么?
您不必使用regex
。
您试图解析的数据是JSON
格式。
Dictionary<string, dynamic> MyData = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(JsonData);
如果你想要一个本机支持,试试JavascriptSerializer(它也给了你一个如何将它直接解析成类的例子,这比你的JSON数据结构的字典更好)
Dictionary<string, dynamic> MyData = JavaScriptSerializer.Deserialize<Dictionary<string, dynamic>>(JsonData);
你正在使用贪婪的正则表达式.*
,这就是为什么你得到所有。相反,使用非贪婪的.*?
将其分割成碎片。
Match match = Regex.Match(input, @"(?<='{)(.*?)(?='})", RegexOptions.IgnoreCase);
之后,如果需要解析更多内容,则对捕获的组(matchgroup
)使用regex:
(".*?(?<!'')":".*?(?<!'')") <-- you'll get spoofed here if single quote, or no quotes
但仍然,我总是建议您使用任何json
解析库。
对于这种任务使用regexp是一个不好的做法使用Json。网络图书馆
首先你可以创建一个这样的类:
public class MyClass
{
public int Id { get; set; }
public string Name { get; set; }
public string Father_Name { get; set; }
public string Contact { get; set; }
public string Email { get; set; }
//Could be byte[]
public string Image { get; set; }
}
然后你可以像下面这样使用JavaScriptSerializer类:
JavaScriptSerializer serializer = new JavaScriptSerializer();
List<MyClass> myClassCollection = serializer.Deserialize<List<MyClass>>(result);
//Where result is your json string
您的API返回JSON
格式的数据,您应该使用。net在System.Web.Script.Serialization
命名空间下的内置JavaScriptSerializer
类或第三方库(如Json.NET
)来阅读此响应。
JavaScriptSerializer
,首先需要使用Add Reference...
添加System.Web.Extensions
引用
使用Regex
解析JSON
是一个不好的做法。