我正在研究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"
}
]
正则表达式的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"
这意味着它正在移除正好的外部括号,而不是内部括号。
所以我的问题是:
答案 0 :(得分:7)
您不必使用regex
。
您尝试解析的数据格式为JSON
。
例如,您可以使用Json.NET
解析它Dictionary<string, dynamic> MyData = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(JsonData);
如果你想要原生支持,试试JavascriptSerializer(它还会给你一个如何直接将它解析成类的例子,这比关于你的JSON数据结构的字典更好)
Dictionary<string, dynamic> MyData = JavaScriptSerializer.Deserialize<Dictionary<string, dynamic>>(JsonData);
答案 1 :(得分:2)
你正在使用贪婪的正则表达式.*
这就是你得到所有的原因。而是使用非贪婪.*?
然后分成几部分。
Match match = Regex.Match(input, @"(?<=\{)(.*?)(?=\})", RegexOptions.IgnoreCase);
之后,如果您需要解析更多,那么在捕获的组(matchgroup
)上使用正则表达式:
(".*?(?<!\\)":".*?(?<!\\)") <-- you'll get spoofed here if single quote, or no quotes
但仍然,我总是建议您为此使用任何json
解析库。
答案 2 :(得分:1)
使用regexp进行此类任务是一种不好的做法使用Json.NET库
答案 3 :(得分:1)
首先,你可以创建一个这样的类:
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
答案 4 :(得分:0)
您的API以JSON
格式返回数据,您应该使用JavaScriptSerializer
命名空间下的.NET内置System.Web.Script.Serialization
类或Json.NET
等第三方库来阅读这个回应。
要使用JavaScriptSerializer
,首先您需要使用System.Web.Extensions
Add Reference...
引用
使用Regex
解析JSON
是一种不好的做法。