根据内容在运行时将json String转换为不同的对象

时间:2015-08-11 23:32:43

标签: json web-services scala json4s

我正在调用一个返回JSON的Web服务。

该服务返回以下响应之一。

案例1:

JSON:

[ {"name":"somevalue1", "key1":"value1", "key2":"value2"}, 
        {"name":"somevalue1", "key1":"value1", "key2":"value2"},
        {"name":"somevalue1", "key1":"value1", "key2":"value2"} ]

案例类:

case class ValidResponse(name: String, key1: String, key2: String)

案例2:

JSON:

{"name": "invalid-response"}

案例类:

case class InvalidResponse(name:String) 

我正在使用json4s来解析响应,如下所示:

val parsedRes = parse(responseJson)
val objs: List[ValidResponse] = j.extract[List[ValidResponse]]

如果响应字符串是案例1中的json,则此方法有效。但是,如果响应字符串包含案例2中的json,则会收到parsedException。 如何处理多种类型的响应?

1 个答案:

答案 0 :(得分:1)

更好的方法是对两种类型的响应使用一个公共类(有效和无效):

case class Response(name: String, key1: Option[String], key2: Option[String])

Play Framework有一个很棒的JSON解析器。你可以利用它。请注意,您的Scala项目不必是Play项目。您只需要导入库。

https://www.playframework.com/documentation/2.4.x/ScalaJson