所以我在使用Play的scalaJSON时遇到了一些问题。首先是因为我无论如何都不能使我的键除了字符串以外的任何东西。我已经定义了一个JSONWrites转换器,如下所示:
implicit val musics = new Writes[Question] {
def writes(question:Question) = Json.obj(
"questionID" -> question.questionID,
"questionText" -> question.questionText,
"responseURI" -> question.responseURI,
"constraints: min,max,Optional" -> Json.arr(question.minResponse, question.maxResponse, question.optionalQ),
"responseDataType" -> question.responseDataType
)
}
我的问题模型案例类:
case class Question (questionID:Int,
questionText:String,
responseURI:String,
minResponse:Option[Int],
maxResponse:Option[Int],
optionalQ:Boolean,
responseDataType:String)
在设计我的REST API时,我想通过/questionBlock/questionID
我试图简单地将问题.questionID作为父键并将其余的JSON嵌套为此键的值,但它不允许我这样做,说expected String actual Int
渲染出来的实际JSON如下所示:
[{"questionID":0,"questionText":"What is your favorite musical artist?",
"responseURI":"/notDoneYet","constraints: min,max,Optional":[1,1,false],
"responseDataType":"String"},{"questionID":1,"questionText":"What is your favorite music genre?",
"responseURI":"/notDoneYet","constraints: min,max,Optional":[1,1,false],"responseDataType":"String"}]
但是使用这个我似乎无法弄清楚如何返回questionID等于1或2等的整个字段。我使用了数组的第0个,第1个等元素,但这对我来说不是理想的方法,因为对于特定的问题序列,问题Ids可能并不总是从0开始。
基本上,当我提供questionID的值时,我希望能够显示一个问题的完整记录。在Javascript中我会将最外面的键设为这个questionID值,但是我无法弄清楚如何使用scalaJson来做到这一点。如果有另一种方法可以实现这一目标,我愿意接受建议。