我正在调用一个返回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。 如何处理多种类型的响应?
答案 0 :(得分:1)
更好的方法是对两种类型的响应使用一个公共类(有效和无效):
case class Response(name: String, key1: Option[String], key2: Option[String])
。
Play Framework有一个很棒的JSON解析器。你可以利用它。请注意,您的Scala项目不必是Play项目。您只需要导入库。