首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Argonaut镜头修改数字JSON字段?

如何使用Argonaut镜头修改数字JSON字段?
EN

Stack Overflow用户
提问于 2015-08-26 09:48:54
回答 1查看 212关注 0票数 1

下面是阿戈纳特透镜文献上一个示例的简化版本

代码语言:javascript
复制
import argonaut._, Argonaut._

val obj: Json = Parse.parseOption("""{"a":{"b":"x","c":2}}""").get

val lens1 = jObjectPL >=> jsonObjectPL("a") >=>
            jObjectPL >=> jsonObjectPL("b") >=> jStringPL

lens1.mod(_ + "y", obj)
// res0: argonaut.Json = {"a":{"b":"xy","c":2}}

如何对数字字段执行类似的操作?例如,假设我们希望将1添加到上面的obj中的数字,以获得

代码语言:javascript
复制
// res1: argonaut.Json = {"a":{"b":"x","c":3}}

我的第一次尝试是

代码语言:javascript
复制
val lens2 = jObjectPL >=> jsonObjectPL("a") >=>
            jObjectPL >=> jsonObjectPL("c") >=> jNumberPL

lens2.mod(_ + 1, obj)

但这最后一行没有编译。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-26 09:50:32

Argonaut中的JsonString只是String的一个类型别名,但是数字稍微复杂一些,因为在JSON中没有能够完美表示数字的核心Scala类型。

Argonaut中的数值类型是JsonNumber,因此传递给mod的第一个参数的类型需要是(JsonNumber) => JsonNumber

具有公共构造函数的JsonNumber子类型是:

  • JsonLong
  • JsonBigDecimal
  • JsonDouble

下面是问题中最后一行代码的更正版本,使用JsonBigDecimal

代码语言:javascript
复制
lens2.mod(i => JsonBigDecimal(i.toBigDecimal + 1), obj)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32223270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档