Scala Spark项目中lift-json转换access_token报错求助
问题根源
报错核心是你试图将包含access_token字段的JSON对象(JObject)直接映射到String类型,lift-json 3.x版本对类型映射的校验比2.x更严格,不允许直接将JObject转为String。即使改成Option[String]也无效,因为本质错误是类型不匹配,而非字段是否可选。
修复步骤
1. 定义匹配响应结构的Case Class
Sharepoint返回的令牌响应是一个JSON对象,必须用对应的Case Class来接收,而非直接映射到String:
case class TokenResponse(access_token: String)
如果响应包含其他字段(如expires_in、token_type等),可一并加入Case Class。
2. 正确使用lift-json解析
引入必要的隐式格式,通过extract方法解析到定义好的Case Class:
import net.liftweb.json._ // 声明隐式格式(lift-json依赖此完成类型映射) implicit val formats = DefaultFormats // 假设jsonStr是Sharepoint返回的响应字符串 val jsonStr = """{"access_token": "eyJ0eXA..."}""" val tokenResp = parse(jsonStr).extract[TokenResponse] val accessToken = tokenResp.access_token // 提取目标令牌字符串
3. 排查潜在问题
- 确认Sharepoint返回的JSON结构未变更:确保顶层是包含
access_token字段的对象,而非数组或其他结构。 - 检查依赖冲突:Spark 3.5.0可能自带Jackson等JSON库,需确保lift-json在依赖树中优先级正确,避免版本冲突。
内容的提问来源于stack exchange,提问作者user5463155
相关产品推荐
相关产品推荐

