2

解析 JSON 字符串,如"""["test",["aaa", "bbb", "ccc"]]"""

易于使用scala.util.parsing.json

// def jsonResponse = scala.io.Source.fromURL("http://en.wikipedia.org/w/api.php?format=json&action=opensearch&search=test").mkString
def jsonResponse = """["test",["aaa", "bbb", "ccc"]]"""

def responseStrings = scala.util.Try[List[String]] {
  val Some(List("test", words: List[_])) = scala.util.parsing.json.JSON.parseFull(jsonResponse)
  words.map{case w: String => w}
}

responseStrings.get foreach println

印刷

aaa
bbb
ccc

如何使用Argonaut以如此简单的方式做到这一点?

4

1 回答 1

2

以下是您在 Argonaut 中执行此操作的方法,它不依赖于在 Try 块中捕获匹配错误异常。

object Argo {
  import argonaut._
  def argoTest(): Unit = {
    val input =  """["test",["aaa", "bbb", "ccc"]]"""

    val js: Option[List[String]] = for {
      json        <- Parse.parseOption(input)
      outerArray  <- json.array
      innerArray  <- outerArray match {
                      case h :: arr :: rest => h.string.filter(_ == "test").flatMap(_ => arr.array)
                      case _ => None
                    }
    } yield innerArray.flatMap(_.string)
    println(js)
  }
}
于 2014-06-14T03:20:35.757 回答