Scala中JsObject和JsValue有什么区别?

7

JsObjectJsValue的作用几乎相同,但在JsObject中

val data[JsObject] = Json.obj("id1"-> "some_id1")
val newData[JsObject] = data ++ Json.obj("id"-> "some_id")

我们可以在JsObject中添加一个新的键值对,但我仍然没有弄清楚如何在JsValue中添加键值对。
1个回答

9
因为JsObject是代表JSON对象({...})的JsValue子类,所以您可以通过使用它执行更多操作。 JsValue 可以是字符串、数字、对象或数组。 因此,您不能假设它具有键值对。 如果您有一个val x: JsValue 并且知道它是JsObject,则可以使用x.as[JsObject]进行强制类型转换,或者如果不确定它是否是JsObject,则可以使用x.asOpt[JsObject]获取一个Option[JsObject]

1
@simon 这个答案意味着您不能向 JsValue 添加键/值对,是这样吗? - franklin
1
@franklin 如果你有一个 JsValue(我们称之为 x),你知道它是一个 JsObject,那么你可以像这样进行转换 x.as[JsObject],然后添加键值对。否则你无法添加键值对。 - Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接