2014-06-14 66 views
2

解析JSON字符串像"""["test",["aaa", "bbb", "ccc"]]"""Scala JSON在2.11中已棄用 - Argonaut是否像scala.util.parsing.json一樣簡單?

使用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這樣一個簡單的方法?

回答

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) 
    } 
}