Предположим, у вас есть следующий простой документ JSON:
{
"key" : "val1"
}
Я хотел бы обновить значение «ключа», но в то же время изменить его тип, поэтому из строки измените его на int. Теперь, используя HCursor, как показано ниже, можно и прямо сделать это:
val cursor = js.hcursor
val position = (cursor --\ "key") >-> (_ => jNumber(1))
«Отменив» вышеуказанную позицию, я получаю новый json, где «ключ» имеет числовое значение, а не строку, что идеально.
Можно ли сделать то же самое с линзами? Я попытался сделать следующее:
val lense = jObjectPL >=>
jsonObjectPL("key") >=>
jNumberPL
lense.mod(_ => JsonBigDecimal(1), js)
Но хотя я не получаю ошибку, это также не работает, в конце концов я получаю исходный документ json без изменений. Однако, если я уважаю тип данных, все работает так, как должно. Есть ли причина, по которой линзы следует использовать только для модификаций одного и того же типа данных? Или я просто делаю что-то ужасное неправильно :)