2012-02-21 194 views
5

我收到來自HTTP請求的亂碼JSON字符串,所以我正在尋找一個臨時解決方案來僅選擇JSON字符串。在Scala中的兩個字符之間選擇子字符串

的request.params()返回此:

[{"insured_initials":"Tt","insured_surname":"Test"}=, _=1329793147757, 
callback=jQuery1707229194729661704_1329793018352 

我想一切從的 '{' 來的結束 '}' 的開始。

我發現了很多與其他語言做類似事情的例子,但是這樣做的目的不是爲了解決問題,而是爲了學習Scala。有人請告訴我如何選擇{....}部分?

回答

4

正如延斯說,正則表達式通常能滿足這一點。但是,語法是有點不同:

"""\{.*\}""".r 

創建的scala.util.matching.Regex一個對象,它提供了你可能要在正則表達式做典型的查詢方法。

你的情況,你是在一個序列中的第一次出現,這是通過findFirstIn做簡單的興趣:

scala> """\{.*\}""".r.findFirstIn("""[{"insured_initials":"Tt","insured_surname":"Test"}=, _=1329793147757,callback=jQuery1707229194729661704_1329793018352""") 
res1: Option[String] = Some({"insured_initials":"Tt","insured_surname":"Test"}) 

注意,它返回的Option類型,你可以在比賽中輕鬆使用找出是否成功找到正則表達式。

編輯:要注意的最後一點是正則表達式通常與換行符不匹配,因此如果您的JSON未完全包含在第一行中,則可能需要考慮首先消除換行符。

+2

對「消除換行符」的簡短評論:更好地使用(?s)修飾符 - 如此。也會匹配換行符。 [參考正則表達式](http://docs.oracle.com/javase/tutorial/essential/regex/pattern.html) – dmitry 2012-02-21 08:47:36

5

正則表達式應該做的伎倆:

"\\{.*\\}".r.findFirstIn("your json string here") 
+0

謝謝Jens,對於無法選擇兩個答案表示歉意。你的也是完美的。 – Jack 2012-02-21 08:13:17

+0

不客氣。不用道歉。 – 2012-02-21 08:21:03

相關問題