Scala/Play - 通过从列表中获取部分数据构建聚合 JSON
Scala/Play - Building an aggregated JSON by getting partial data from the list
我有一个案例class:
case class Vehicle( type:String, brand: String, transmission: String)
我正在使用 Slick 查询包含案例 class 中所有列的数据库,我得到了这样的查询结果(对象列表):
List(Vehicle(car, audi, automatic), Vehicle(truck, toyota, automatic), Vehicle(motorcycle, bmw, manual))
我希望结果 JSON 看起来像这样:
{
"vehicles" : [
{
"type" : "car",
"brand" : "audi",
"transmission" : "automatic",
},
{
"type" : "truck",
"brand" : "toyota",
"transmission" : "automatic",
},
{
"type" : "motorcycle",
"brand" : "bmw",
"transmission" : "manual",
}
]
}
现在要实现这一点,我可以轻松地使用一个可变列表并一个一个地映射我的数据库结果,然后构建一个像这样的 JSON。由于我已经在使用 Play Framework,写出 JSON 是小菜一碟。但是,我想以更实用的方式做事,而不使用任何可变变量。
如何从数据库结果中读取对象列表并将其放在一起,就像在结果中一样JSON?
定义车辆的Json格式,然后您可以通过Json.toJson(vehicles)
自动将List[Vehicle]
转换为Json
import play.api.libs.json._
case class Vehicle( type:String, brand: String, transmission: String)
object Vehicle {
implicit val vehicleFormat = Json.format[Vehicle]
}
//this will be slick function which gets data from database
def getVehiclesFromDB: Future[List[Vehicle]] = Future(List(Vehicle("a", "b", "c"), Vehicle("d", "e", "f")))
控制器内部
@Singleton
class Application @Inject() (vehiclesRepo: VehiclesRepo) extends Controller {
def getVehicles = Action.async {
vehiclesRepo.getVehiclesFromDB.map { vehicles =>
Ok(Json.toJson(vehicles))
}
}
}
我有一个案例class:
case class Vehicle( type:String, brand: String, transmission: String)
我正在使用 Slick 查询包含案例 class 中所有列的数据库,我得到了这样的查询结果(对象列表):
List(Vehicle(car, audi, automatic), Vehicle(truck, toyota, automatic), Vehicle(motorcycle, bmw, manual))
我希望结果 JSON 看起来像这样:
{
"vehicles" : [
{
"type" : "car",
"brand" : "audi",
"transmission" : "automatic",
},
{
"type" : "truck",
"brand" : "toyota",
"transmission" : "automatic",
},
{
"type" : "motorcycle",
"brand" : "bmw",
"transmission" : "manual",
}
]
}
现在要实现这一点,我可以轻松地使用一个可变列表并一个一个地映射我的数据库结果,然后构建一个像这样的 JSON。由于我已经在使用 Play Framework,写出 JSON 是小菜一碟。但是,我想以更实用的方式做事,而不使用任何可变变量。
如何从数据库结果中读取对象列表并将其放在一起,就像在结果中一样JSON?
定义车辆的Json格式,然后您可以通过Json.toJson(vehicles)
List[Vehicle]
转换为Json
import play.api.libs.json._
case class Vehicle( type:String, brand: String, transmission: String)
object Vehicle {
implicit val vehicleFormat = Json.format[Vehicle]
}
//this will be slick function which gets data from database
def getVehiclesFromDB: Future[List[Vehicle]] = Future(List(Vehicle("a", "b", "c"), Vehicle("d", "e", "f")))
控制器内部
@Singleton
class Application @Inject() (vehiclesRepo: VehiclesRepo) extends Controller {
def getVehicles = Action.async {
vehiclesRepo.getVehiclesFromDB.map { vehicles =>
Ok(Json.toJson(vehicles))
}
}
}