有没有更简洁的方法来使用Argonaut删除顶级JSON属性?

时间:2013-11-17 18:42:47

标签: json scala zipper argonaut

假设我有这个小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的问题仍然存在。

1 个答案:

答案 0 :(得分:0)

Cursor浮动/移动引用就像C / C ++中的指针一样。 并且 downField 是移动指令到光标,因此如果你没有撤消光标仍然在“已查看”的角色而不是父json对象。 要返回父json对象,必须撤消以移动光标。