2014-04-28 16 views
11

Mam jakiś obiekt źródłowy src i chciałbym uzyskać od niego . Wszystkie przykłady i dokumentację dla json4s wydają się obracać wokół coraz ciąg JSON zakodowane, tak:json4s: Konwertuj typ na 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) 
} 

To świetnie, jeśli chcę tylko wynik końcowy, ale wolałbym napisać:

def encodeJson(src: AnyRef): JValue 

Wygląda na to, że chcę użyć ToJsonWritable[T], ale nie mogę znaleźć implementacji dla Writer[AnyRef] (nie mogę też znaleźć skaladocsa dla json4s, który po prostu powie mi implementacje).

Odpowiedz

9

Odpowiedź tutaj jest org.json4s.Extraction - ma metodę 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) 
}