Выберите подстроку между двумя символами в Scala - PullRequest
5 голосов
/ 21 февраля 2012

Я получаю искаженную строку JSON из HTTP-запроса, поэтому я ищу временное решение для выбора только строки JSON.

Request.params () возвращает это:

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

Мне бы хотелось, чтобы все, начиная с '{' и до конца '}'.

Я нашел много примеров того, как делать подобные вещи с другими языками, но цельэто не только для решения проблемы, но и для изучения Scala.Кто-нибудь, пожалуйста, покажите мне, как выбрать эту {....} часть?

Ответы [ 2 ]

5 голосов
/ 21 февраля 2012

регулярные выражения должны сделать трюк:

"\\{.*\\}".r.findFirstIn("your json string here")
4 голосов
/ 21 февраля 2012

Как сказал Дженс, для этого обычно достаточно регулярного выражения. Тем не менее, синтаксис немного отличается:

"""\{.*\}""".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 не полностью содержится в первой строке, вы можете сначала подумать об устранении разрывов строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...