You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala解析JSON:如何为不存在的字段设置默认值?

Scala中JSON字段不存在时返回默认值的实现方法

类比Python的json_dict.get('ids', 'default_value'),Scala里不同的JSON处理库有对应的实现方式,以下是两种常用库的解决方案:

1. 使用Play JSON库

Play JSON是Scala生态中常用的JSON处理工具,你可以通过asOpt结合getOrElse实现默认值逻辑:

import play.api.libs.json._

// 含ids字段的示例JSON
val jsonWithIds: JsValue = Json.parse("""{"ids": [1, 2, 3], "name": "example"}""")
// 不含ids字段的示例JSON
val jsonWithoutIds: JsValue = Json.parse("""{"name": "example"}""")

// 获取ids字段,不存在则返回空数组作为默认值(可按需调整)
val ids1 = (jsonWithIds \ "ids").asOpt[JsArray].getOrElse(JsArray.empty)
val ids2 = (jsonWithoutIds \ "ids").asOpt[JsArray].getOrElse(JsArray.empty)

// 若需转为具体类型(如List[Int])
val idsList1 = (jsonWithIds \ "ids").asOpt[List[Int]].getOrElse(List(-1))
val idsList2 = (jsonWithoutIds \ "ids").asOpt[List[Int]].getOrElse(List(-1))

解释:(json \ "ids")返回JsLookupResult,调用asOpt[T]会尝试将字段转为指定类型T,字段不存在或类型不匹配时返回None,最后用getOrElse设置默认值。

2. 使用Circe库

Circe是流行的函数式JSON库,通过hcursor的getOrElse方法可直接实现需求:

import io.circe._
import io.circe.parser._

// 含ids字段的JSON字符串
val jsonStrWithIds = """{"ids": [1, 2, 3], "name": "example"}"""
// 不含ids字段的JSON字符串
val jsonStrWithoutIds = """{"name": "example"}"""

// 解析JSON
val jsonWithIds = parse(jsonStrWithIds).getOrElse(Json.Null)
val jsonWithoutIds = parse(jsonStrWithoutIds).getOrElse(Json.Null)

// 获取ids字段,不存在则返回List(0)作为默认值
val ids1 = jsonWithIds.hcursor.get[List[Int]]("ids").getOrElse(List(0))
val ids2 = jsonWithoutIds.hcursor.get[List[Int]]("ids").getOrElse(List(0))

解释:hcursor.get[T]("ids")返回Either[DecodingFailure, T],解码失败(包括字段不存在)时,getOrElse会返回指定默认值。

注意事项

  • 根据项目实际使用的JSON库选择对应方法,确保已引入相关依赖。
  • 默认值的类型需与目标字段类型一致,避免类型不匹配错误。

内容的提问来源于stack exchange,提问作者Ani Menon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:42:36