在Scala中选择两个字符之间的子字符串

时间:2012-02-21 07:07:48

标签: string scala

我从HTTP请求中收到一个乱码JSON字符串,所以我正在寻找一个临时解决方案来选择JSON字符串。

request.params()返回:

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

我希望从'{'开始到'}'结束。

我发现了很多与其他语言做类似事情的例子,但这样做的目的不仅是解决问题,还要学习Scala。有人请告诉我如何选择{....}部分吗?

2 个答案:

答案 0 :(得分:5)

Regexps应该可以解决问题:

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

答案 1 :(得分:4)

正如Jens所说,正则表达式通常就足够了。但是,语法有点不同:

"""\{.*\}""".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未完全包含在第一行中,您可能需要考虑首先消除换行符。