2015-04-27 91 views
0

我有一個簡單的動作,輸出一個JSON對象的字符串,就像這樣:播放框架JSON輸出問題

Ok(toJson(Map(
    "results" -> result_lists 
))) 

這個工程的所有權利。但是,如果我做的:

Ok(toJson(Map(
    "action" -> action_string, // a Scala String 
    "results" -> result_lists // a Scala List 
))) 

沒有JSON序列中發現的類型scala.collection.immutable.Map [字符串,java.io.Serializable接口]

編譯錯誤...有什麼問題?

+0

呃...首先做什麼...... Map(「action」 - > action, 「results」 - > result_lists)是什麼類型的''。你會看到...'toJsoe(Map( 「results」 - > result_lists )))'因爲Play爲Map,List,String,Int,Double等提供了Json序列化器。所以基本上如果Json序列化器可用於類型'T1'和'T2',那麼你可以Json序列化一個'Map [T1,List [T2]]'。我希望你現在理解它。 –

+0

什麼是行動類型?你必須提供Writes [TypeOfAction]如下所述:https://www.playframework.com/documentation/2.3.x/ScalaJson#Using-Writes-converters – Infinity

+0

你好,我添加了註釋以指示類型 – davidshen84

回答

1

正如其他人張貼在之前的評論中,地圖的類型是不是可以通過框架反序列化到JSON,但你可以很容易地擺脫地圖:

scala> val s = "hello" 
s: String = hello 

scala> val list = List(1,2,3) 
list: List[Int] = List(1, 2, 3) 

scala> Json.obj("somestring" -> s, "somemap" -> list) 
res0: play.api.libs.json.JsObject = {"somestring":"hello","somemap":[1,2,3]} 

產生的對象可以根據需要由動作返回。