0
隨着Jerkson,我能夠解析包含一個JSON陣列中的字符串,像這樣:播放2.1斯卡拉JSON解析比Jerkson更難?
com.codahale.jerkson.Json.parse[Array[Credentials]](contents)
,其中內容是包含字符串如下:
[{"awsAccountName":"mslinn","accessKey":"blahblah","secretKey":"blahblah"}]
...我會得到憑證數組。
(Brief diversion)我嘗試使用新的JSON解析器爲Play 2.1和Scala使用不同的數據做類似的事情。對於一個簡單的解析,以下工作正常。案例類(S3File)定義的不應用方法需要這個工作:
case class S3File(accountName: String,
bucketName: String,
endpoint: String = ".s3.amazonaws.com")
implicit val s3FileFormat = Json.format[S3File]
val jsValue = Json.parse(stringContainingJson)
Json.fromJson(jsValue).get
讓我們重新考慮包含JSON原始字符串稱爲內容。與所有集合一樣,對象數組也沒有不適用的方法。這意味着我在上述分流中展示的技術將無法工作。我試圖創建一個一次性案例類用於此目的:
case class ArrayCreds(payload: Array[Credentials])
implicit val credsFormat = Json.format[ArrayCreds]
val jsValue = Json.parse(contents)
val credArray = Json.fromJson(jsValue).get.payload
...不幸的是,這種失敗:
No unapply function found
[error] implicit val credsFormat = Json.format[ArrayCreds]
[error] ^
[error]
/blah.scala:177: diverging implicit expansion for type play.api.libs.json.Reads[T]
[error] starting with method ArrayReads in trait DefaultReads
[error] val credArray = Json.fromJson(jsValue).get
[error] ^
是否有使用播放解析JSON陣列的2.1的一個簡單方法新的JSON解析器?我預計一次性case類是錯誤的做法,並隱含的需要而不是:
implicit val credsFormat = Json.format[Credentials]
但我不知道如何寫反序列化的其餘部分以簡單的方式。我見過的所有代碼示例都比較冗長,這看起來與Scala的精神背道而馳。理想的咒語就像Jerkson的咒語一樣簡單。
感謝,
邁克
你做它似乎太容易了: ) –