2014-04-28 21 views
11

我有一些源對象src並希望從中獲得JValue。所有的例子和json4s文件似乎圍繞得到一個JSON編碼的字符串,像這樣:json4s:將類型轉換爲JValue

def encodeJson(src: AnyRef): String = { 
    import org.json4s.NoTypeHints 
    import org.json4s.JsonDSL.WithDouble._ 
    import org.json4s.jackson.JsonMethods._ 
    import org.json4s.jackson.Serialization 
    import org.json4s.jackson.Serialization.write 
    implicit val formats = Serialization.formats(NoTypeHints) 

    write(src) 
} 

這是偉大的,如果我只希望最後的結果,但我更喜歡寫:

def encodeJson(src: AnyRef): JValue 

好像ToJsonWritable[T]是我想用的,但我似乎無法找到Writer[AnyRef]的實現(我也無法找到json4s的scaladocs,它只是告訴我實現)。

回答

9

這裏的答案是org.json4s.Extraction - 它有一個方法decompose(a: Any)(implicit formats: Formats): JValue

def encodeJson(src: AnyRef): JValue = { 
    import org.json4s.{ Extraction, NoTypeHints } 
    import org.json4s.JsonDSL.WithDouble._ 
    import org.json4s.jackson.Serialization 
    implicit val formats = Serialization.formats(NoTypeHints) 

    Extraction.decompose(src) 
}