Scala 如何使用Play json在json级别更改json字段值?

Scala 如何使用Play json在json级别更改json字段值?,scala,playframework,play-json,Scala,Playframework,Play Json,我在我的应用程序中使用了一个简单的case类,在某个时候我将其更改为json并将其发送到某个api调用,如下所示: import play.api.libs.json.{Json, OFormat} object MyClassSer { implicit val MyClassFormat: OFormat[MyClass] = Json.format[MyClass] } import MyClassSer._ case class MyClass(a: String, b: St

我在我的应用程序中使用了一个简单的case类,在某个时候我将其更改为json并将其发送到某个api调用,如下所示:

import play.api.libs.json.{Json, OFormat}

object MyClassSer {
  implicit val MyClassFormat: OFormat[MyClass] = Json.format[MyClass]
}

import MyClassSer._

case class MyClass(a: String, b: String)

val myClass = MyClass("1", "2")

myApiService.post(Json.toJson(myClass))
如果我知道json中的
b
总是一个Int值(但不幸的是在MyClass中它必须是字符串),我想知道是否有办法将它改为Int

因此,我将发送
{“a”:“1”,“b”:“2}
而不是
{“a”:“1”,“b”:“2}


我可以用JsValue或JsObject来实现这一点吗?我不想拥有另一个case类并将其转换为另一个case类。

使用自定义写入,而不是默认的
Json.format….

import play.api.libs.json.{json,}
对象MyClass{
隐式val格式:OFormat[MyClass]=Json.format[MyClass]
隐式val customwrites:写入[MyClass]=新写入[MyClass]{
def写入(myClass:myClass):JsValue=Json.obj(
“a”->myClass.a,
“b”->myClass.b.toInt
)
}
}
案例类MyClass(a:String,b:String)
val myClass=myClass(“1”、“2”)
//隐式使用默认写入
println(Json.toJson(myClass))/{“a”:“1”,“b”:“2”}
//显式使用非默认写入
println(Json.toJson(myClass)(myClass.customwrites))/{“a”:“1”,“b”:2}

虽然我会小心地转换您想要的类型,但不会有任何回退,以防值不是Int。

使用自定义写入,而不是默认的
Json.format…..

import play.api.libs.json.{json,}
对象MyClass{
隐式val格式:OFormat[MyClass]=Json.format[MyClass]
隐式val customwrites:写入[MyClass]=新写入[MyClass]{
def写入(myClass:myClass):JsValue=Json.obj(
“a”->myClass.a,
“b”->myClass.b.toInt
)
}
}
案例类MyClass(a:String,b:String)
val myClass=myClass(“1”、“2”)
//隐式使用默认写入
println(Json.toJson(myClass))/{“a”:“1”,“b”:“2”}
//显式使用非默认写入
println(Json.toJson(myClass)(myClass.customwrites))/{“a”:“1”,“b”:2}

虽然我会小心地转换您想要的类型,但不会有任何回退,以防值不是Int。

您自己已经尝试过什么?代码?我创建了一个新的case类MyClassFix(a:String,b:Int),然后对它进行转换,但我真正的case类很大,所以我不想要它,为什么它是字符串如果(至少在某些情况下)它是Int。。。我想说的是,首先有一个设计问题,你自己已经尝试过什么?代码?我创建了一个新的case类MyClassFix(a:String,b:Int),然后对它进行转换,但我真正的case类很大,所以我不想要它,为什么它是字符串如果(至少在某些情况下)它是Int。。。首先我想说的是设计问题