假设以下简单的JSON文件:如何使用argonaut镜头修改值并键入JSON?
{
"key" : "val1"
}
我想更新“键”的价值,但同时也改变它的类型,所以从字符串其更改为int。现在,使用HCURSOR像它下面是可能的,直截了当地做到这一点:
val cursor = js.hcursor
val position = (cursor --\ "key") >-> (_ => jNumber(1))
通过“撤销”上述位置我最终有一个新的JSON,其中的“钥匙”有一个数值,而不是一个String ,这是完美的。
使用镜头可以做同样的事吗?我试图做到以下几点:
val lense = jObjectPL >=>
jsonObjectPL("key") >=>
jNumberPL
lense.mod(_ => JsonBigDecimal(1), js)
不过,虽然我不明白这一点也不起作用错误,最后我结束了原来的JSON文档修改。如果我尊重数据类型,事情就像他们应该那样工作。是否有理由将镜头仅用于修改相同的数据类型?或者我只是在做一些非常错误的事情:)
感谢您的快速回答@ Travis!非常感激。阅读镜头和Argonaut的文档我的印象是,您应该始终定义您所期望的那种JSON数据类型。但我想这是人类的一部分复杂的东西有时:) – cpard
@cpard是的:)。在这种情况下,您希望在该位置使用JSON字符串,但是如果将'jStringPL'添加到镜头中,则无法更改该类型。 –