通过circe修改json字段类型

时间:2019-04-29 12:17:12

标签: json scala circe

我有简单的Json:

val str = """{"test":"123"}"""

如何将String "123"修改为Int 123以获取新的Json?:

{"test":123}

现在我正在使用:

val json = parse(str).getOrElse(Json.Null)
val jsObj = json.asObject.get  // Unsafe, just example
val newJson = Json.fromJsonObject(jsObj.remove("test").add("test", Json.fromInt(123)))

但是这段代码并不漂亮。

是否可以使此代码更漂亮,或者可以通过绕线光学系统来做到?

1 个答案:

答案 0 :(得分:2)

它应该根据您要如何处理极限工况(在这里抛出异常)来解决问题:

import io.circe._
import io.circe.parser.parse

val str = """{"test":"123"}"""
val json = parse(str).getOrElse(Json.Null)
json.mapObject(
  _.mapValues( v =>
    v.asString
     .flatMap(parse(_).toOption)
     .getOrElse(throw new IllegalArgumentException("No String found"))
  )
)