这是我的回复
scala > val a= """{"string":"{\"data\":{\"id\":\"2c91809f4ef7678b014ef86ee28511c2\",\"unitName\":\"gatlir1\",\"owner\":\"gatlir1\",\"description\":\"gatlir1\",\"nofChairs\":0,\"nofBeds\":0,\"nofApptStartWithInHour\":0,\"nofApptDischargeWithInHour\":0,\"modifiedDateTime\":\"Aug 4, 2015 4:18:13 AM\"},\"status\":\"SUCCESS\",\"message\":\"unit_save\"}"}"""
我需要在scala中从该响应中获取id值。我已将响应存储在一个变量中。我已经为它写了正则表达式并存储在另一个变量中。
这是问题,我收到错误。 正则表达式:
scala> val b= """{\"id\":\"(\w+)\""""
将正则表达式插入“b”时,我没有收到任何错误,但在比较时我收到错误
如果我写这样的表达
scala> a.matches(b)
错误:
java.util.regex.PatternSyntaxException: Illegal repetition
{\"id\":\"(\w+)\"
at java.util.regex.Pattern.error(Pattern.java:1955)
at java.util.regex.Pattern.closure(Pattern.java:3157)
at java.util.regex.Pattern.sequence(Pattern.java:2134)
at java.util.regex.Pattern.expr(Pattern.java:1996)
at java.util.regex.Pattern.compile(Pattern.java:1696)
at java.util.regex.Pattern.<init>(Pattern.java:1351)
at java.util.regex.Pattern.compile(Pattern.java:1028)
at java.util.regex.Pattern.matches(Pattern.java:1133)
at java.lang.String.matches(String.java:2109)
任何人都可以帮助我..
答案 0 :(得分:6)
为什么在这里使用正则表达式?只需阅读JSON。 JSON不是常规语言,使用正则表达式无法轻松描述。
以下是为Scala解析JSON的许多库中的一个https://github.com/json4s/json4s
它还可以更容易地访问内部的任何其他对象。
答案 1 :(得分:1)
你应该逃避{
:
val b= """\{\"id\":\"(\w+)\""""
答案 2 :(得分:1)
这是固定代码:
val a= """{"string":"{"data":{"id":"2c91809f4ef7678b014ef86ee28511c2","unitName":"gatlir1","owner":"gatlir1","description":"gatlir1","nofChairs":0,"nofBeds":0,"nofApptStartWithInHour":0,"nofApptDischargeWithInHour":0,"modifiedDateTime":"Aug 4, 2015 4:18:13 AM"},"status":"SUCCESS","message":"unit_save"}"}"""
val b= """\{"id":"(\w+)""".r
val allMatches = b.findAllMatchIn(a)
allMatches.foreach { m =>
println(m.group(1))
}
打印:2c91809f4ef7678b014ef86ee28511c2
。
请参阅demo
请注意,您不必在"""
引用的字符串中转义双引号(请参阅this SO answer)。