在运行时根据json字符串的内容将其转换为不同的对象
我正在调用一个返回JSON的web服务 该服务返回以下响应之一 案例1: JSON:在运行时根据json字符串的内容将其转换为不同的对象,json,web-services,scala,json4s,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"} ] {"name": "inval
[ {"name":"somevalue1", "key1":"value1", "key2":"value2"},
{"name":"somevalue1", "key1":"value1", "key2":"value2"},
{"name":"somevalue1", "key1":"value1", "key2":"value2"} ]
{"name": "invalid-response"}
案例类别:
case class ValidResponse(name: String, key1: String, key2: String)
case class InvalidResponse(name:String)
案例2:
JSON:
[ {"name":"somevalue1", "key1":"value1", "key2":"value2"},
{"name":"somevalue1", "key1":"value1", "key2":"value2"},
{"name":"somevalue1", "key1":"value1", "key2":"value2"} ]
{"name": "invalid-response"}
案例类别:
case class ValidResponse(name: String, key1: String, key2: String)
case class InvalidResponse(name:String)
我使用json4s解析响应,如下所示:
val parsedRes = parse(responseJson)
val objs: List[ValidResponse] = j.extract[List[ValidResponse]]
在案例1中,如果响应字符串是json,则此操作有效。但是,在案例2中,如果响应字符串包含json,我会得到一个parsedException。
如何处理多种类型的响应 更好的方法是对两种类型的响应(有效和无效)使用一个公共类:
案例类响应(名称:String,键1:Option[String],键2:Option[String])
Play框架有一个很棒的JSON解析器。你可以利用这个。请注意,Scala项目不必是Play项目。您只需要导入库