2012-02-21 20 views
5

Otrzymuję zniekształcony ciąg JSON z żądania HTTP, więc szukam rozwiązania tymczasowego, aby wybrać tylko ciąg JSON.Wybierz podłańcuch między dwoma znakami w Scala

The request.params() zwraca to:

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

Chciałbym wszystko od początku '{' do końca '}'.

Znalazłem wiele przykładów robienia podobnych rzeczy z innymi językami, ale celem tego nie jest tylko rozwiązanie problemu, ale także nauka Scala. Czy ktoś może mi pokazać, jak wybrać tę część {...}?

Odpowiedz

4

Jak powiedział Jens, wyrażenie regularne zwykle wystarcza do tego. Jednak składnia jest nieco inna:

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

tworzy obiekt scala.util.matching.Regex, który zapewnia typowe metody zapytań może chcesz zrobić na wyrażenie regularne.

w Twoim przypadku, po prostu jesteś zainteresowany pierwszego wystąpienia w sekwencji, która odbywa się poprzez findFirstIn:

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

pamiętać, że wraca na Option typu, które można łatwo wykorzystać w meczu do dowiedzieć się, czy wyrażenie regularne zostało znalezione pomyślnie, czy nie.

Edit: Ostatnim punktem zwrócić uwagę jest to, że wyrażenia regularne zazwyczaj nie pasują nad wierszami, więc jeśli JSON nie jest w pełni zawarte w pierwszej linii, można myśleć o wyeliminowaniu linebreaks pierwszy.

+2

Skrócony komentarz do "eliminowania łamania zasad": lepiej użyć modyfikatora (? S) - tak. dopasowałoby również znaki nowej linii. [Referencje dotyczące wyrażeń regularnych] (http://docs.oracle.com/javase/tutorial/essential/regex/pattern.html) – dmitry

5

Wyrażenia regularne powinno załatwić sprawę:

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

Dziękuję Jens, przepraszam za brak możliwości wyboru dwóch odpowiedzi. Twój również jest doskonały. – Jack

+0

Nie ma za co. Nie ma potrzeby przepraszać. –

Powiązane problemy