将任何Scala对象转换为JSON

问题描述 投票:16回答:2

我正在使用最新版本的Play Framework,它是像这样的Json.toJson(obj)的JSON lib。但是toJson无法将任何Scala对象转换为JSON,因为数据结构未知。有人建议使用案例转换,但这里我的Scala知识不足。数据来自数据库,但表的结构未知。

我应该在哪里进一步创建将这种未知数据结构转换为JSON?

json scala playframework playframework-2.2
2个回答
7
投票

鉴于您希望序列化为JSON的类型数量有限,这应该有效:

object MyWriter {
  implicit val anyValWriter = Writes[Any] (a => a match {
    case v:String => Json.toJson(v)
    case v:Int => Json.toJson(v)
    case v:Any => Json.toJson(v.toString)
    // or, if you don't care about the value
    case _ => throw new RuntimeException("unserializeable type") 
  })
}

然后,您可以通过在要序列化Any的位置导入隐式值来使用它:

import MyWriter.anyValWriter
val a: Any = "Foo"
Json.toJson(a)

0
投票

使用json4s,您可以导入包:

import org.json4s.DefaultFormats
import org.json4s.native.Serialization.write

然后在特征中创建一个隐式变量:

implicit val formats: DefaultFormats = DefaultFormats

最后,在您的方法中,使用它:

write(myObject)
© www.soinside.com 2019 - 2024. All rights reserved.