首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala Akka (Un)用喷雾JSON编组嵌套的Seq集合

Scala Akka (Un)用喷雾JSON编组嵌套的Seq集合
EN

Stack Overflow用户
提问于 2021-09-30 14:30:34
回答 1查看 120关注 0票数 1

我正在尝试使用Spray将下面的“Seq”集合封装到一个“BidRequest”实体中,参数如定义的那样。Seq集合主要是嵌套的,因此一些“Seq”参数字段也有需要封送的变量集合类型。然后,经过计算,目的是揭开结果作为一个实体的‘比德BidResponse’。

做这件事最好的方法是什么?

我用的是Akka-HTTP,Akka-Streams,Akka-Actor。

Seq收藏:

代码语言:javascript
复制
      val activeUsers = Seq(
          Campaign(
              id = 1,
              country = "UK",
              targeting = Targeting(
                  targetedSiteIds = Seq("0006a522ce0f4bbbbaa6b3c38cafaa0f") 
                  ),
                  banners = List(
                      Banner(
                          id = 1,
                          src ="https://business.URLTV.com/wp-content/uploads/2020/06/openGraph.jpeg",
                          width = 300,
                          height = 250
                          )
                        ),
                  bid = 5d
                )
            )

BidRequest案例类:

代码语言:javascript
复制
case class BidRequest(id: String, imp: Option[List[Impression]], site:Site, user: Option[User], device: Option[Device])

BidResponse案例类:

代码语言:javascript
复制
case class BidResponse(id: String, bidRequestId: String, price: Double, adid:Option[String], banner: Option[Banner])

其他案例类:

代码语言:javascript
复制
case class Campaign(id: Int, country: String, targeting: Targeting, banners: List[Banner], bid: Double)
case class Targeting(targetedSiteIds: Seq[String])
case class Banner(id: Int, src: String, width: Int, height: Int)

case class Impression(id: String, wmin: Option[Int], wmax: Option[Int], w: Option[Int], hmin: Option[Int], hmax: Option[Int], h: Option[Int], bidFloor: Option[Double])
case class Site(id: Int, domain: String)
case class User(id: String, geo: Option[Geo])
case class Device(id: String, geo: Option[Geo])
case class Geo(country: Option[String])

到目前为止,我已经尝试使用下面的代码,但是仍然会得到类型不匹配的错误:

代码语言:javascript
复制
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
import spray.json.DefaultJsonProtocol._

implicit val resFormat = jsonFormat2(BidResponse)
implicit val bidFormat = jsonFormat1(BidRequest)
implicit val cFormat = jsonFormat1(Campaign)
implicit val tFormat = jsonFormat1(Targeting)
implicit val bFormat = jsonFormat1(Banner)
implicit val iFormat = jsonFormat1(Impression)
implicit val sFormat = jsonFormat1(Site)
implicit val uFormat = jsonFormat1(User)
implicit val dFormat = jsonFormat1(Device)
implicit val gFormat = jsonFormat1(Geo)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-02 12:18:18

使用喷雾JSON获取Type的原因是,您需要使用相应的jsonFormatN方法,这取决于case类中参数的数量。

就你而言:

代码语言:javascript
复制
implicit val resFormat = jsonFormat5(BidResponse)
implicit val bidFormat = jsonFormat5(BidRequest)
implicit val cFormat = jsonFormat1(Campaign)
implicit val tFormat = jsonFormat1(Targeting)
implicit val bFormat = jsonFormat4(Banner)
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69394035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档