2012-02-21 14 views
5

Obtengo una cadena JSON ilegible de una solicitud HTTP, por lo que estoy buscando una solución temporal para seleccionar únicamente la cadena JSON.Seleccionar una subcadena entre dos caracteres en Scala

Los request.params() devuelve la siguiente:

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

me gustaría todo, desde el inicio de la '{' hasta el final de la '}'.

Encontré muchos ejemplos de hacer cosas similares con otros lenguajes, pero el propósito de esto no es solo resolver el problema, sino también aprender Scala. ¿Alguien me mostrará cómo seleccionar esa {...} parte?

Respuesta

4

Como dijo Jens, una expresión regular suele ser suficiente para esto. Sin embargo, la sintaxis es un poco diferente:

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

crea un objeto de scala.util.matching.Regex, que proporciona los métodos de consulta comunes que pueden querer hacer en una expresión regular.

En su caso, usted simplemente está interesado en la primera aparición en una secuencia, que se realiza a través de findFirstIn:

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

Observe que devuelve el Option tipo, que se puede utilizar fácilmente en un partido de averiguar si la expresión regular se encontró con éxito o no.

Editar: Un punto final a tener en cuenta es que las expresiones regulares normalmente no coinciden con los saltos de línea, por lo que si su JSON no está completamente en la primera línea, puede pensar en eliminar primero los saltos de línea.

+2

Breve comentario sobre "eliminar los saltos de línea": mejor modificador de uso (? S) - tan. también coincidiría con los caracteres de nueva línea. [Referencia en expresiones regulares] (http://docs.oracle.com/javase/tutorial/essential/regex/pattern.html) – dmitry

5

regexps debe hacer el truco:

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

Gracias Jens, se disculpa por no poder elegir dos respuestas. El tuyo es perfecto también – Jack

+0

De nada. No necesitas disculparte. –

Cuestiones relacionadas