Scala:如何在Monocle中增加字段值

J Pullar

给定monocle项目中JsonExample,我想创建一个镜头,在其中set调用将替换键/值对中的值,或者如果键/值对尚不存在则创建键/值对。

但是,这似乎用一个索引(可以组成安全类型)或一个不表示安全类型的at表示。

//for replacing:
(jsObject composeOptional index("age") composePrism jsNumber).set(45)

//for creating:
(jsObject composeLens at("age")).set(JsNumber(45)) <- will accept any old json

这是我可能的追求吗?
我还可以扩展它,例如,如果age嵌套在另一个JsObject中,例如:

val n = (jsObject composeOptional index("nested") composePrism 
jsObject composeOptional index("age") composePrism jsNumber).set(45)

“嵌套”的键/值对尚不存在的地方,它将在嵌套时创建对象,然后添加字段

n(JsObject(Map.empty)) -> JsObject(Map("nested" -> JsObject("age" -> JsNumber(45)))
朱利安(Julien)

让我们来看看indexat签名JsObject

def at(field: String): Lens[JsObject, Option[Json]]
def index(field: String): Optional[JsObject, Json]

at是一个Lens目标,因此其目标('Option [Json]')始终存在。这意味着,我们可以adddeleteupdateJson在的任何领域的元素JsonObject

import argonaut._, Argonaut._
import monocle.function._

(jObjectPrism composeLens at("name")).set(Some(jString("John")))(Json())
> res0: argonaut.Json = {"name":"John"}

(jObjectPrism composeLens at("name")).set(Some(jString("Robert")))(res0)
> res1: argonaut.Json = {"name":"Robert"}

(jObjectPrism composeLens at("name")).set(None)(res0)
> res2: argonaut.Json = {}

另一方面,index是,Optional因此目标(Json)可能存在或可能不存在。这意味着index只能update值,但不能adddelete

(jObjectPrism composeLens index("name")).set(jString("Robert"))(Json())
> res3: argonaut.Json = {}

(jObjectPrism composeLens index("name")).set(jString("Robert"))(res0)
> res4: argonaut.Json = {"name":"Robert"}

因此,回到最初的问题,如果您想在某个特定字段add或对其进行update赋值,则需要使用at并将其包装在JsonSome(请参阅参考资料res1),它将覆盖或创建该Json字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在scala中增加字符

来自分类Dev

如何在scala中增加字符

来自分类Dev

如何在输入文本字段中添加或增加数字值?

来自分类Dev

如何在MongoDB 3.6中以一秒的值增加日期字段?

来自分类Dev

如何在php中增加会话值

来自分类Dev

如何增加输入字段的值?

来自分类Dev

如何:增加 GraphQL 中基于整数的字段的值

来自分类Dev

如何在python中的线程内增加类字段?

来自分类Dev

如何在scala上的dataframe中对我的字段值进行分区

来自分类Dev

如何在Java中的Map中增加特定键的值?

来自分类Dev

如何增加mongodb中的字段?

来自分类Dev

如何在Kibana中覆盖字段值?

来自分类Dev

如何在 Julia 中显示字段值

来自分类Dev

如何在php中自动增加一个值?

来自分类Dev

如何在PostgreSQL中自动增加字母数字值?

来自分类Dev

如何在Oracle中增加TEMP TABLE Space值?

来自分类Dev

如何在C ++中增加指针的指针值

来自分类Dev

如何在C#中增加或减少标签值?

来自分类Dev

如何在Firestore数组中增加地图值

来自分类Dev

如何在MySQL中增加列值的出现次数

来自分类Dev

如何在JavaScript中增加地图的所有值

来自分类Dev

如何在php中自动增加一个值?

来自分类Dev

如何在Django的模型中增加和属性的值?

来自分类Dev

如何在Scala Map中设置值?

来自分类Dev

如何在Scala Map中设置值?

来自分类Dev

在C#中增加SqlDataReader字段值

来自分类Dev

如何增加列表中的值?

来自分类Dev

如何增加字典中的值

来自分类Dev

如何在另一列中引用值来增加一列中的值