2012-10-12 144 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