Использование сопоставления с шаблоном с результатом net.liftweb.util.JSONParser.parse - PullRequest
2 голосов
/ 03 сентября 2011

Я пытаюсь проанализировать строку JSON с помощью net.liftweb.util.JSONParser.Это метод parse () возвращает значение Box [Any], которое я хочу обработать с помощью сопоставления с шаблоном следующим образом:

JSONParser.parse("{foo: 'xxx', bar: 'yyy'}") match {
        case Full(Map) => println("ok")
        case x => println(x)
}

Я бы ожидал, что этот код выведет "ok", но вместо этого он напечатает

 Full(Map(foo -> xxx, bar -> yyy))

Кто-нибудь знает, что не так с моим утверждением?

Ответы [ 2 ]

2 голосов
/ 03 сентября 2011

Full(Map) означает Full, содержащий синглтон object Map. Если вы хотите Full с чем-то внутри, что является картой (объект карты не один), это должно быть Full(m: Map) (вы можете использовать _ вместо m, если вам не нужен доступ к этой карте )

1 голос
/ 04 сентября 2011

Обновлено:

scala> import net.liftweb.util._
import net.liftweb.util._

scala> import net.liftweb.common.Full
import net.liftweb.common.Full

scala> JSONParser.parse("{foo: 'xxx', bar: 'yyy'}") match {
 | case Full(m: Map[_, _]) => println("ok")
 | case x => println(x)
 | }
ok

scala> 

(Я забыл Full () вокруг карты [, ]

Я не знаю ваших требований, но Liftтакже есть другая библиотека json, более мощная, чем JSONParser, она называется lift-json

...