通过 circe 修改 json 字段类型
Modify json field type via 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)))
但是这段代码并不漂亮。
是否可以使此代码更漂亮或者可以通过 circe optics 来实现?
它应该根据你想如何管理极限情况来解决问题(这里我抛出一个异常):
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"))
)
)
我有简单的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)))
但是这段代码并不漂亮。
是否可以使此代码更漂亮或者可以通过 circe optics 来实现?
它应该根据你想如何管理极限情况来解决问题(这里我抛出一个异常):
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"))
)
)