小编Joy*_*age的帖子

如何在平面级别中将JsValue合并到JsObject

我有两个从案例类创建的JsValue,即Book和Book详细信息

val bookJson = Json.tojson(Book)
val bookDetailJson = Json.tojson(BookDetail)
Run Code Online (Sandbox Code Playgroud)

格式为:

//Book
{
  id: 1,
  name: "A Brief History of Time"
}

//BookDetail
{
  bookId: 1,
  author: "Steven Hawking",
  publicationDate: 1988,
  pages: 256
}
Run Code Online (Sandbox Code Playgroud)

如何将它们合并到play-framework 2.10中的单个Json?即

//Book with detail
{
  id: 1,
  name: "A Brief History of Time",
  bookId: 1,
  author: "Steven Hawking",
  publicationDate: 1988,
  pages: 256
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试转换,但未能遍历第二个JsValue:

val mapDetail = (__).json.update(
                  __.read[JsObject].map { o =>
                  o.deepMerge( JsObject(Seq(("detail", bookDetailJson))) )
                })

bookJson.validate(mapDetail).get
Run Code Online (Sandbox Code Playgroud)

它会降低一级,我真的不想要.

//Book with detail
{
  id: 1,
  name: …
Run Code Online (Sandbox Code Playgroud)

json scala playframework-2.0

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

Scala类型推迟

我正在使用Play framework 2.1和Scala 2.10.1,并希望构建一个通用函数来从自定义案例类的List中构造一个JsArray.

private def buildJsArray[T](l: List[T])(result: JsArray): JsArray = {
    l match {
      case List() => result
      case x::xs => buildJsArray(xs)(result :+ Json.toJson(x)) // compiling error here!
    }
  }
Run Code Online (Sandbox Code Playgroud)

用法:

val applyJsonArray = buildJsArray(List[Apple])(new JsArray())
Run Code Online (Sandbox Code Playgroud)

但是,抛出了编译错误:

No Json deserializer found for type T. Try to implement an implicit Writes or Format for this 
 type.
Run Code Online (Sandbox Code Playgroud)

我确实为特定的案例类(即Apple案例类)编写了一个Json反序列化器.

如何推迟编译器在运行时而不是在编译时检查x的类型?

非常感谢!

scala playframework-2.0

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

Scala类,特征和对象内存分配的差异

在Scala中,有很多方法可以创建对象:

例如,使用new关键字创建类

class Car {   
  def startEngine() = println("run....") 
}
val car = new Car 
car.startEngine()  // run....
Run Code Online (Sandbox Code Playgroud)

其中car对象应该像堆中的Java座位中的"newed"对象一样,并且在被取消引用时等待垃圾收集.

那么,创造特质怎么样?

trait Car {
  def startEngine() = println("run...")
}
val car = new Car {}
car.startEngine() //run....
Run Code Online (Sandbox Code Playgroud)

这是一个有效的语法,使用类myCar扩展Car创建对象.相反,它只是从Trait创建对象.

它是否反对堆中的座位?(我猜它不是)那么,它是否存在于堆栈中并且一旦从scoop中被取消引用为局部变量?

最后,如何通过对象?

object Car {
  def startEngine() = println("run...")
}
Car.startEngine()  //run....
Run Code Online (Sandbox Code Playgroud)

这与via Trait相同吗?我相信对象更有可能生活在堆栈中.

在内存分配方面,有人可以就这三种语法之间的区别进行阐述吗?

scala

2
推荐指数
1
解决办法
1727
查看次数

Scala JavaTokenParsers动态解析

我正在尝试使用JavaTokenParser来解析从前一个令牌读取大小的字符串的重复次数,即

list-name:5
ABCDE

second-list-name:2
AB  //<--the length of the string determines by the value at the token before
Run Code Online (Sandbox Code Playgroud)

因此,repN将由列表名称后面的令牌I确定

def body = (listname <~ ":") ~ (numOfRepeat <~ LF) ~ repN(?, char)
def char = """[A-Z]""".r
Run Code Online (Sandbox Code Playgroud)

有什么技巧我可以将刚传递的令牌(numOfRepeat)作为Int值传递给下一个解析器(repN)?

谢谢!

parsing scala tokenize

2
推荐指数
1
解决办法
747
查看次数

标签 统计

scala ×4

playframework-2.0 ×2

json ×1

parsing ×1

tokenize ×1