2012-10-12 140 views
0

我试图用System.Text.RegularExpressions.Regex类从JSON字符串中获取一些文本。蜇是类似于正则表达式选项 - 没有递归正则表达式

[{"name":"joe","message":"hello","sent":"datetime"}{"name":"steve","message":"bye","sent":"datetime"}] 

我试图使用匹配()方法来获取“消息”值。但是,指定一个比赛,就像这样message":"*","sent的模式将返回3场比赛:

hello 
bye 
hello","sent":"datetime"}{"name":"steve","message":"bye 

如何组织的选项或修改我的模式,以排除递归正则表达式检查?我只想匹配

hello 
bye 
+4

您可能想要说明为什么要使用RegEx,而不是C#中提供的众多经过验证的JSON库和片段之一。 –

+0

我会推荐使用JSON.NET,这对RegEx来说不是一个好的应用程序。您可以通过Visual Studio中的NuGet下载该包,或者可以在此处找到它; http://nuget.org/packages?q=Json.NET – evanmcdonnal

+0

这真的是你使用的正则表达式吗?我不明白它会如何返回这些比赛。应该'*'是否是'。*'? – Barmar

回答

1

JavaScriptSerializer类(命名空间System.Web.Script.Serialization,System.Web.Extensions.dll程序集)对于处理像这样的JSON字符串非常有用。

var json = "[{\"name\":\"joe\",\"message\":\"hello\",\"sent\":\"datetime\"},{\"name\":\"steve\",\"message\":\"bye\",\"sent\":\"datetime\"}]"; 

var serializer = new JavaScriptSerializer(); 
var result = serializer.Deserialize<object[]>(json); 

// now have an array of objects, each of which happens to be an IDictionary<string, object> 
foreach(IDictionary<string, object> map in result) 
{ 
    var messageValue = map["message"].ToString(); 
    Console.WriteLine("message = {0}", messageValue); 
} 
1

JSON最好通过JSON工具解析。

例如,您可以尝试使用非贪婪语法.*?

+0

我想不出如何使用Json.net DeserializeObject方法 - 这是我到目前为止: string [] messages = new string [NumberOfMessages]; 对(INT I = 0; I (; } – Zee

+0

注不确定如何将<>()DeserializeObject之后的结构要string ...感谢大家的输入! – Zee

+0

@Zach:如果你想知道如何使用Json工具,我会推荐发布另一个问题。 – Guvante