标签: playframework-json

使用play.api.libs.json将对象序列化为json

我正在尝试将一些相对简单的模型序列化为json.例如,我想得到json表示:

case class User(val id: Long, val firstName: String, val lastName: String, val email: Option[String]) {
    def this() = this(0, "","", Some(""))
}
Run Code Online (Sandbox Code Playgroud)

我是否需要使用适当的读写方法编写自己的格式[用户],还是有其他方法吗?我看过https://github.com/playframework/Play20/wiki/Scalajson,但我还是有些迷茫.

json scala playframework playframework-2.0 playframework-json

15
推荐指数
2
解决办法
2万
查看次数

Play Framework 2.3(Scala)中的自定义JSON验证约束

我设法用自定义约束实现表单验证,但现在我想用JSON数据做同样的事情.

如何将自定义验证规则应用于JSON解析器?

示例:客户端的POST请求包含用户名(username),我不仅要确保此参数是非空文本,还要确保此用户实际存在于数据库中.

// In the controller...

def postNew = Action { implicit request =>
    request.body.asJson.map { json =>
        json.validate[ExampleCaseClass] match {
            case success: JsSuccess[ExampleCaseClass] =>
                val obj: ExampleCaseClass = success.get
                // ...do something with obj...
                Ok("ok")
            case error: JsError =>
                BadRequest(JsError.toFlatJson(error))
        }
    } getOrElse(BadRequest(Json.obj("msg" -> "JSON request expected")))
}


// In ExampleCaseClass.scala...

case class ExampleCaseClass(username: String, somethingElse: String)

object ExampleCaseClass {
    // That's what I would use for a form:
    val userCheck: Mapping[String] = nonEmptyText.verifying(userExistsConstraint)

    implicit val …
Run Code Online (Sandbox Code Playgroud)

validation json scala playframework-2.3 playframework-json

12
推荐指数
1
解决办法
5526
查看次数

Scala中的常量值播放JSON读取

我想在通过JSON读取构造对象时使用常量值.

例如,该类将是:

case class UserInfo(
  userId: Long = -1, 
  firstName: Option[String] = None,
  lastName:  Option[String] = None
)
Run Code Online (Sandbox Code Playgroud)

阅读将是:

   implicit val userRead: Reads[UserInfo] = (
      (JsPath \ "userId").read[Long] and
      (JsPath \ "firstName").readNullable[String] and
      (JsPath \ "lastName").readNullable[String] 
    )(UserInfo.apply _)
Run Code Online (Sandbox Code Playgroud)

但我不想在JSON对象中指定userId的值.我将如何编写Reads,以便始终在UserInfo对象中创建-1的值而不在正在读取的JSON对象中指定它?

json scala playframework playframework-json

11
推荐指数
1
解决办法
1310
查看次数

JsResult - Monad还是Appative?

我认识一个之间的区别Monad,并ApplicativeflatMap可用的Monad,但不是Applicative.

如果这是真的,我对这些Scala Play JSON 文档感到困惑:

所以有趣的是JsResult [A]是一个monadic结构,可以用于这种结构的经典函数:

flatMap [X](f:A => JsResult [X]):JsResult [X]

等等

但是,然后文件继续说:

请注意,JsResult [A]不仅仅是Monadic而且是Applicative,因为它累积了错误.这个累积的特性使得JsResult [T]使得用于理解不是很好,因为你只会得到第一个错误,而不是全部错误.

因为,据我所知,一个for-comprehension是语法糖flatMap,怎么可能JsResultApplicativeMonad

monads scala applicative playframework-json

8
推荐指数
1
解决办法
446
查看次数

Play2找不到我对JSON的隐式读取或格式

这是我的搜索对象:

package models.helper
import play.api.libs.json.Format
import play.api.libs.json.JsValue
import play.api.libs.json.JsObject
import play.api.libs.json.JsString

case class Search (name: String, `type`:String){

  implicit object SearchFormat extends Format[Search] {
    def reads(json: JsValue): Search = Search(
      (json \ "name").as[String],
      (json \ "type").as[String]
    )

    def writes(s: Search): JsValue = JsObject(Seq(
        "name" -> JsString(s.name),
        "type" -> JsString(s.`type`)
    ))  
  }
}
Run Code Online (Sandbox Code Playgroud)

我在尝试使用WS调用web服务时尝试使用此类:

val search = response.json.as[Search]
Run Code Online (Sandbox Code Playgroud)

但scala编译器一直在抱怨这条线:

找不到类型models.helper.Search的Json反序列化器.尝试为此类型实现隐式读取或格式.

谁能告诉我我做错了什么?

json scala playframework-2.0 playframework-json

7
推荐指数
1
解决办法
9924
查看次数

Scala Play Json Reads

我有一个示例代码如下.

import play.api.libs.json._
import play.api.libs.functional.syntax._
import play.api.data.validation.ValidationError
import play.api.libs.json.Reads._

case class Retailer(firstName:String,lastName:String,email:String,mobileNo:String,password:String)
case class Business(name:String,preferredUrl:String,businessPhone:String,retailer:Retailer)

object JsonTest {
  val jsonValue = """
  {
    "business":
    {
      "name":"Some Business Name",
      "preferredUrl":"someurl",
      "businessPhone":"somenumber",
      "retailer":
      {
        "firstName":"Some",
        "lastName":"One",
        "email":"someone@somewhere.com",
        "mobileNo":"someothernumber",
        "password":"$^^HFKH*"
      }
    }

  }
  """
  def printJson ={

    implicit val rltRds = (
      (__ \ "firstName").read[String] ~
      (__ \ "lastName").read[String] ~
      (__ \ "email").read[String] ~
      (__ \ "mobileNo").read[String] ~
      (__ \ "password").read[String]
    )(Retailer)    

    implicit val bsnsRds = (
      (__ \ "name").read[String] ~
      (__ \ …
Run Code Online (Sandbox Code Playgroud)

json scala playframework playframework-json

7
推荐指数
1
解决办法
6100
查看次数

播放Json Reads和String

我在Play 2.3中有以下JSON阅读器:

import play.api.libs.json._
import play.api.libs.json.Reads._
val airportSearchReads: Reads[String] = (JsPath \ "search").read[String](minLength(3))
Run Code Online (Sandbox Code Playgroud)

并且编译器给了我错误

diverging implicit expansion for type play.api.libs.json.Reads[M]
starting with method ArrayReads in trait DefaultReads
Run Code Online (Sandbox Code Playgroud)

如果我使用implicit val我得到的

 ambiguous implicit values:
 both value uuidReads in trait DefaultReads of type => play.api.libs.json.Reads[java.util.UUID]
 and value airportSearchReads in object AirportSearch of type => play.api.libs.json.Reads[String]
 match expected type play.api.libs.json.Reads[M]
Run Code Online (Sandbox Code Playgroud)

我如何让它工作?

json scala playframework playframework-2.0 playframework-json

6
推荐指数
1
解决办法
2264
查看次数

在Scala / Play中解析JSON日期时间

我定义了以下读取:

import org.joda.time.DateTime;

implicit val userInfoRead: Reads[UserInfo] = (
  (JsPath \ "userName").readNullable[String] and
] (JsPath \ "startDate").readNullable[DateTime]
 (UserInfo.apply _)
Run Code Online (Sandbox Code Playgroud)

传递以下JSON对象:

  "userInfo" : {
    "userName": "joeuser",
    "startDate": "2006-02-28"
  }
Run Code Online (Sandbox Code Playgroud)

当我验证此数据时,出现以下错误:

(/startDate,List(ValidationError(validate.error.expected.jodadate.format,WrappedArray(yyyy-MM-dd))))))
Run Code Online (Sandbox Code Playgroud)

关于格式化中我缺少的任何建议吗?

datetime json scala playframework-json

5
推荐指数
1
解决办法
4405
查看次数

如何为Map编写Json Reads Combinator [Int,Long]

我正在尝试为类型Map [Int,Long]写一个json读取组合器

到目前为止我有这个:

implicit val mapWrites = Json.writes[Map[Int, Long]]

implicit val mapReads: Reads[Map[Int, Long]] = (
  // ???
) // ?
Run Code Online (Sandbox Code Playgroud)

我不确定这是如何工作的,我尝试做(Map [Int,Long] .apply但是apply方法不可用.

寻找一些帮助来编写这个Reads组合器.

json scala playframework playframework-json

5
推荐指数
1
解决办法
2718
查看次数

用于Timestamp的Scala playframework隐式读写器

我正在使用play.api.libs.json._库.我有这种Scala类.我需要以Json格式读/写这个类.因为Timestamp没有隐式的读/写器.我必须提供自己的.不幸的是,我尝试了几种方式.你能告诉我它是怎么做的吗?提前致谢!

case class Event(id: Long, startTime: Option[java.sql.Timestamp] = None, endTime: Option[java.sql.Timestamp] = None)
Run Code Online (Sandbox Code Playgroud)

我想按照Json格式POST/GET

{
  "id": 1,
  "startTime": "2011-10-02 18:48:05.123456",
  "endTime": "2011-10-02 20:48:05.123456"
}
Run Code Online (Sandbox Code Playgroud)

json scala playframework-2.1 playframework-json

5
推荐指数
2
解决办法
4860
查看次数