类型不匹配;找到:Seq[play.api.libs.json.JsObject] 必需:Seq[play.api.libs.json.Json.JsValueWrapper]

问题描述 投票:0回答:2

我正在使用 Play Framework 2.5.6 将自定义对象序列转换为 JSON 格式。

下面是我的代码。

import play.api.libs.json.Json
import play.api.libs.json.JsObject


case class Item (id:Long,name:String,price:Double) 
object SerializingListIntoJSON {

  def details(itemList: Seq[Item]) = {
    **Json.arr(itemList.map(item => Json.obj("id" -> item.id,"name" -> item.name,"price" -> item.price)): _*)**
  }

  def main(args: Array[String]): Unit = {
    val itemList = Seq(Item(1, "Programming Scala", 49.99), Item(2, "Scala in Action", 44.99))

    println(details(itemList))
  }
}

代码在粗体行中给了我编译错误,显示“类型不匹配;发现:Seq[play.api.libs.json.JsObject]需要:Seq[play.api.libs.json.Json.JsValueWrapper]”。

我不确定我的代码有什么问题。对此的任何帮助都深表感谢。

playframework-2.5
2个回答
0
投票

以下

def details(itemList: Seq[Item]) = {
  JsArray(itemList.map(item =>
    Json.obj("id" -> item.id, "name" -> item.name, "price" -> item.price)))
}

产生以下结果:

[
  {
    "id": 1,
    "name": "Programming Scala",
    "price": 49.99
  },
  ...
]

如果这就是你所追求的?如果您还没有看过 Play Scala JSON 文档,那么您可能会发现有关写入和读取的讨论以及其他详细信息和示例很有帮助。


0
投票

这是一个辅助函数,它将

JsValue
实例的 Scala 序列转换为
JsArray
:

def toJsArray(seq: Seq[JsValue]): JsArray = {
    seq.foldLeft(JsArray.empty)((a, b) => a ++ Json.arr(b)).as[JsArray]
}

它将每个

JsValue
包裹在自己的
JsArray
中,然后将它们结合在一起。

© www.soinside.com 2019 - 2024. All rights reserved.