斯卡拉。如何使用 json spray 解组选项值?
Scala. How to Unmarshall Option values using json spray?
我正在使用 json-spray 库解组 json 数组。
这是代码。
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
import spray.json.DefaultJsonProtocol._
def unmarshalProfiles(response: HttpResponse): Future[Array[Profile]] = {
implicit val profileFormat = jsonFormat16(Profile)
println("[RES - SUCCESS] Request returned with " + response.status)
return Unmarshal(response.entity).to[Array[Profile]]
}
远程服务器将其响应写入 json 数组。如果响应充满了一项或多项,则没有问题。但是,如果没有可用的配置文件项,服务器 returns null (不是空数组)并且在解组时出现错误'Expected Array as JsArray, but got null'.
我认为将 Array[Profile] 包装到 Option 对象中是一个不错的选择。
所以我把代码改成下面的样子
def unmarshalProfiles(response: HttpResponse): Future[Option[Array[Profile]]] = {
implicit val profileFormat = jsonFormat16(Profile)
println("[RES - SUCCESS] Request returned with " + response.status)
return Unmarshal(response.entity).to[Option[Array[Profile]]]
}
不过,当响应为空对象时,我得到了同样的错误。
当 Option 对象为 None 时,是否存在解组 Option 对象的方法?
提前致谢!
您可以选择与选项一起工作。这意味着,要像这样定义你的方法:
def unmarshalProfiles(response: HttpResponse)(implicit mat: Materializer): Future[Option[Array[Profile]]] = {
implicit val profileFormat = jsonFormat16(Profile)
Unmarshal(Option(response.entity)).to[Option[Array[Profile]]]
}
然后null
会编组成None
,一个已经存在的数组会变成Some(...)
我正在使用 json-spray 库解组 json 数组。 这是代码。
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
import spray.json.DefaultJsonProtocol._
def unmarshalProfiles(response: HttpResponse): Future[Array[Profile]] = {
implicit val profileFormat = jsonFormat16(Profile)
println("[RES - SUCCESS] Request returned with " + response.status)
return Unmarshal(response.entity).to[Array[Profile]]
}
远程服务器将其响应写入 json 数组。如果响应充满了一项或多项,则没有问题。但是,如果没有可用的配置文件项,服务器 returns null (不是空数组)并且在解组时出现错误'Expected Array as JsArray, but got null'.
我认为将 Array[Profile] 包装到 Option 对象中是一个不错的选择。 所以我把代码改成下面的样子
def unmarshalProfiles(response: HttpResponse): Future[Option[Array[Profile]]] = {
implicit val profileFormat = jsonFormat16(Profile)
println("[RES - SUCCESS] Request returned with " + response.status)
return Unmarshal(response.entity).to[Option[Array[Profile]]]
}
不过,当响应为空对象时,我得到了同样的错误。 当 Option 对象为 None 时,是否存在解组 Option 对象的方法? 提前致谢!
您可以选择与选项一起工作。这意味着,要像这样定义你的方法:
def unmarshalProfiles(response: HttpResponse)(implicit mat: Materializer): Future[Option[Array[Profile]]] = {
implicit val profileFormat = jsonFormat16(Profile)
Unmarshal(Option(response.entity)).to[Option[Array[Profile]]]
}
然后null
会编组成None
,一个已经存在的数组会变成Some(...)