2015-07-05 43 views
0

我正在使用帶有框架的akka​​,並且覺得序列化/反序列化jsons非常麻煩。 Play框架需要我從JSON定義作者/讀者。在我的項目中,我正在使用可能會改變的巨大json對象,並且我想簡化它。有沒有辦法提供一些案例類的默認作家/讀者?將案例類導出/序列化爲json

我知道這個功能是由lift-json(提取,分解方法)提供的,然後我需要將它從/轉換爲播放JSON以用於每個請求/響應。 Play JSON中是否有這樣的功能?

回答

0

起初看起來很複雜,但實際上很簡單。 Scala是強大的打字工具,動態語言(如JavaScript或Ruby)的動態特性使得開始時有些惱人,但您會開始欣賞強打字的好處。

import play.api.libs.json._ 

case class Animal(name: String, age: Int) 
implicit val formatAnimal = Json.format[Animal] 

這就是你需要的一切。然後,解析:

val animal: Animal = Json.parse("""{"name":"Bob","age":5}""").as[Animal] 

和字符串化:

val json: String = Json.toJson(animal) 

您還可以使用JsPath解析東西嵌套在JSON,例如:

(jspath/"data"/"result").as[Animal] 

框架自帶格式爲String,Long等內置,如果你想使用不同的案例類如Animal,你需要創建一種格式,就像我上面做的那樣。

+0

你好,謝謝你的回答。我主要關注「implicit val formatAnimal = Json.format [Animal]」這一行,因爲我的對象非常龐大,我寧願使用一些默認格式化程序來處理/從案例類。換句話說,我希望格式化程序通過默認選擇。 –

+0

「我希望格式化程序可以通過默認選擇」< - 你能改述嗎?我不明白對不起。 – bjfletcher

+0

事情是,我有對象具有嵌套的對象,並且它們具有嵌套的對象......等等......我不想有30行只爲json中的每個case類定義隱式格式化程序。我想要的是像json.as [HugeObject],並將其解析爲HugeObject。或者,這30行不再需要,是否僅爲頂級對象註冊隱式格式化程序就足夠了? –