当前位置: 首页 > 面试题库 >

为JSON集类型定义`Reads`

孙斌
2023-03-14
问题内容

如何play.api.libs.ReadsPeople案例类创建一个?

scala> type Id = Long
defined type alias Id

scala> case class People(names: Set[Id])
defined class People

scala>   implicit val PeopleReads: Reads[People] = (
     |     (__ \ "names").read[Set[Id]])(People)
<console>:21: error: overloaded method value read with alternatives:
  (t: Set[Id])play.api.libs.json.Reads[Set[Id]] <and>
  (implicit r: play.api.libs.json.Reads[Set[Id]])play.api.libs.json.Reads[Set[Id]]
 cannot be applied to (People.type)
           (__ \ "names").read[Set[Id]])(People)

问题答案:

(...)(People)语法是为您使用构造参数列表(嗯,从技术上讲,它是一个Builder,而不是列表)而设计的,and并希望将People构造函数提升到应用函子中,Reads以便可以将其应用于这些参数。

例如,如果您的People类型如下所示:

case class People(names: Set[Id], home: String)

您可以这样写:

implicit val PeopleReads: Reads[People] = (
  (__ \ "names").read[Set[Id]] and
  (__ \ "home").read[String]
)(People)

但是,在您的情况下,for的构造函数People只有一个参数,并且您没有使用过and,所以您没有a Builder[Reads[Set[Id] ~ String],您只是拥有一个普通的old Reads[Set[Id]]

很好,因为它意味着您不需要怪异的应用函子语法,而您所需要的只是map

implicit val PeopleReads = (__ \ "names").read[Set[Id]].map(People)

这样就完成了。



 类似资料:
  • 问题内容: 我遇到了这个JSON代码。我注意到它利用了价值。在哪里可以找到有关此值类型的更多信息? 问题答案: *即使在javascript中有效, *undefined 也不是有效的json值。根据官方json标准 (ECMA-404,第5节): JSON值可以是对象,数组,数字,字符串,true,false或null。 对于json,请使用 null 而不是 undefined :

  • Rust 自定义数据类型主要是通过下面这两个关键字来创建: struct: 定义一个结构体 enum: 定义一个枚举类型 而常量的创建可以通过 const 和 static 关键字来创建。

  • 存在多种方法来重新定义现有类型的行为以及提供新的类型。 重写类型编译 一个常见的需求是强制更改类型的“字符串”版本,即在create table语句或其他SQL函数(如cast)中呈现的版本。例如,应用程序可能希望强制呈现 BINARY 适用于除一个平台外的所有平台 BLOB 待渲染。在本例中,使用现有的泛型类型 LargeBinary ,是大多数用例的首选。但是为了更准确地控制类型,每个方言的编

  • 1. 包含头文件 #import <AdHubSDK/AdHubSDK.h> 2. AdHubCustomView 的创建和初始化 在需要导入广告的ViewController头文件中导入头文件并声明实例以及声明代理 #import <AdHubSDK/AdHubSDK.h> @interface AdHubCustomViewController ()<AdHubCustomViewDele

  • 正如代码所示,我想知道的是,在内存分配中,隐藏Base而不调用子的额外方法的实际情况是什么,它被调用了什么,有没有一种通过Base调用方法的方法。请帮忙

  • 注:内容翻译自官网文档 Language Guide (proto3) 中的 Defining A Message Type 一节 首先我们来看一个非常简单的例子. 让我们假设你想定义一个搜索请求消息格式, 每个搜索请求有一个查询字符串, 搜索结果的第几页/每页结果数量. 这里是你用来定义消息类型的.proto文件: syntax = "proto3"; message SearchReques