假设以下简单的 JSON 文档:
{
"key" : "val1"
}
我想更新“key”的值,但同时也改变它的类型,所以从字符串改变它到一个int。现在,使用像下面这样的 HCursor 是可能的,而且很直接:
val cursor = js.hcursor
val position = (cursor --\ "key") >-> (_ => jNumber(1))
通过“撤消”上述位置,我最终得到了一个新的 json,其中“key”具有数值而不是字符串,这是完美的。
是否可以使用镜头做同样的事情?我尝试执行以下操作:
val lense = jObjectPL >=>
jsonObjectPL("key") >=>
jNumberPL
lense.mod(_ => JsonBigDecimal(1), js)
但是,尽管我没有收到错误,但它也不起作用,最后我得到了未修改的原始 json 文档。不过,如果我尊重数据类型,事情就会按应有的方式工作。是否有理由仅将镜头用于相同数据类型的修改?或者我只是在做一些非常错误的事情:)