json - Scala Play - Json 解析
问题描述
我从外部服务接收 JSON,我的目标是完全按原样解析它。
主要问题是:一个值可以为空,也可以不存在,但null
不存在的含义不同。所以我想以某种方式抓住这个。
例如这个 JSON:
{
"a": null,
"b": 1
}
与此不同:
{
"b": 1
}
你能帮我吗?
更新:
很抱歉更新延迟。无论如何:你是对的,我在中间有一个隐式的自定义读取,目前我使用"a".readNullable[Double]
and"a".write[Option[Double]]
和 case 类是这样的:
case class Example(a: Option[Double])
解决方案
只是通过一个详细的示例(play-json 2.6)来说明@mfirry 所说的内容:
scala> import play.api.libs.json._
import play.api.libs.json._
scala> val json1 = Json.parse("""{"a": null, "b": 1}""")
json1: play.api.libs.json.JsValue = {"a":null,"b":1}
scala> val json2 = Json.parse("""{"b": 1}""")
json2: play.api.libs.json.JsValue = {"b":1}
scala> (json1 \ "a").isDefined
res8: Boolean = true
scala> (json1 \ "a") == JsDefined(JsNull)
res3: Boolean = true
scala> (json2 \ "a").isDefined
res7: Boolean = false
scala> (json2 \ "a")
res5: play.api.libs.json.JsLookupResult = JsUndefined('a' is undefined on object: {"b":1})
推荐阅读
- kotlin - 是否有更惯用的方式来执行订阅和异步/等待操作?
- c# - 在 c#.net 中将视图 SQL Server 替换为 public List<>
- git - Gitlab-CI 中存在已删除的标签
- javascript - Javascript Date getDay() 格式问题
- linux - makefile 包括路径层次结构和库位置?
- ansible - 我已将任务的输出存储到寄存器变量中,因此我想将值转换为列表并需要在 ansible playbook 中获取特定值
- react-native - 在 e2e 测试中的某个点开始使用 Detox 在 react native
- timeout - 设置 execution_timeout 后的 AirflowTaskTimeout
- python - 为什么我不能输入 tkinter Text 小部件?
- bash - 在 Bash 中,如何将标准输出设置为 tee 内的变量