播放元组Seq的Scala Json作家 [英] Play Scala Json Writer for Seq of Tuple

查看:105
本文介绍了播放元组Seq的Scala Json作家的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图找到一种使用内置Macro Json Writer来序列化Seq [(String,Customer)]

I'm trying to find a way to use the built in Macro Json Writer in order to serialize Seq[(String,Customer)]

我设法为Seq [Customer]做到了这一点,但是当添加touple时,编译器开始对我尖叫.

I managed to do this for Seq[Customer] but when adding the touple, the compiler starts screaming at me.

此代码有效:

package models.health

import play.api.libs.json._

case class Customer(name: String, age: Int)

//we use the dummy var as a workaround to the json writer    limitations (cannot handle single argument case class)
case class Demo(customers: Seq[Customer], dummy: Option[String] =    None)

object Demo {

 import play.api.libs.functional.syntax._

 implicit val customer_writer = Json.writes[Customer]

 implicit val writes: Writes[Demo] = (
 (__ \ "customers").write[Seq[Customer]] and
 (__ \ "dummy").writeNullable[String]) { 
    (d: Demo) => (d.customers,d.dummy)
 }

}

但是下面的代码(只需从Seq [Customer]更改为Seq [(String,Customer)]就行了...真的很感谢您的帮助:

BUT the below code (simply change from Seq[Customer] to Seq[(String,Customer)] Doesn't Copmile... Any help is really appreciated:

package models.health

import play.api.libs.json._

case class Customer(name: String, age: Int)

//we use the dummy var as a workaround to the json writer    limitations (cannot handle single argument case class)
case class Demo(customers: Seq[(String,Customer], dummy: Option[String] =    None)

object Demo {

 import play.api.libs.functional.syntax._

 implicit val customer_writer = Json.writes[Customer]

 implicit val writes: Writes[Demo] = (
 (__ \ "customers").write[Seq[(String,Customer)]] and
 (__ \ "dummy").writeNullable[String]) { 
    (d: Demo) => (d.customers,d.dummy)
 }

}

这是我得到的编译器错误:

this is the compiler error I got:

No Json serializer found for type Seq[(String,models.health.Customer)]

推荐答案

该库不对您希望元组如何序列化做出任何假设.您可以使用数组,对象等.

The library makes no assumption as to how you want your tuple to serialize. You could use an array, an object, etc.

通过添加此隐式Writes函数,您的序列化程序会将其写为数组.

By adding this implicit Writes function, your serializer will write it out as an array.

  implicit def tuple2Writes[A, B](implicit a: Writes[A], b: Writes[B]): Writes[Tuple2[A, B]] = new Writes[Tuple2[A, B]] {
    def writes(tuple: Tuple2[A, B]) = JsArray(Seq(a.writes(tuple._1), b.writes(tuple._2)))
  }

这篇关于播放元组Seq的Scala Json作家的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆