假设我有一个小Argonaut Json
实例:
import argonaut._, Argonaut._
Json.obj(
"id" := 42,
"viewed" := false
)
现在,我想删除密钥为viewed
的对。我发现以下内容有效,但有点过于冗长。有比这更短的吗:
for {
field <- json.cursor.downField("viewed")
updated <- field.delete
} yield updated.undo
此外,在我看来,"提交"更改的方法(undo
)的名称似乎有点误导?我应该如何解释这个名字?起初,我认为有一种方法可以撤销修改历史上的最后一次更改。
更新
我找到了一个解决方案。使用HCursor
:
json.hcursor.downField("viewed").delete.undo
undo
为什么被命名为undo
的问题仍然悬而未决。
光标是浮动/移动引用,就像C/C++中的指针一样。downField是对光标的移动指令,因此,如果不撤消,光标将保持在"已查看"属性,而不是父json对象。要返回到父json对象,您必须undo来移动光标。