2012-02-21 132 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

相关问题