Scala构建Json时无法去除{}的双引号问题求助
在Scala Play Framework中生成空JSON对象的解决方案
当前代码将value字段设置为字符串"{}",导致生成的JSON中该字段值是带双引号的字符串形式,而实际需要的是空JSON对象{}。
原代码示例
import scala.util.Random import math.Ordered.orderingToOrdered import math.Ordering.Implicits.infixOrderingOps import play.api.libs.json._ import play.api.libs.json.Writes import play.api.libs.json.Json.JsValueWrapper val data1 = (1 to 2) .map {r => Json.toJson(Map( "name" -> Json.toJson(s"Perftest${Random.alphanumeric.take(6).mkString}"), "domainId"->Json.toJson("343RDFDGF4RGGFG"), "value" ->Json.toJson("{}")))} val data2 = Json.toJson(data1) println(data2)
实际输出
[{"name":"PerftestpXI1ID","domainId":"343RDFDGF4RGGFG","value":"{}"},{"name":"PerftestHoZSQR","domainId":"343RDFDGF4RGGFG","value":"{}"}]
预期输出
[{"name":"PerftestpXI1ID","domainId":"343RDFDGF4RGGFG","value":{}},{"name":"PerftestHoZSQR","domainId":"343RDFDGF4RGGFG","value":{}}]
解决方案
问题根源在于Json.toJson("{}")是将字符串转换为JSON字符串类型,自然会保留双引号。要生成空JSON对象,直接使用Play Json库提供的空对象构造器即可,有两种常用方式:
方式1:使用JsObject.empty
直接替换Json.toJson("{}")为JsObject.empty,它代表一个空的JSON对象:
import scala.util.Random import play.api.libs.json._ val data1 = (1 to 2) .map {r => Json.toJson(Map( "name" -> Json.toJson(s"Perftest${Random.alphanumeric.take(6).mkString}"), "domainId"->Json.toJson("343RDFDGF4RGGFG"), "value" -> JsObject.empty))} val data2 = Json.toJson(data1) println(data2)
方式2:使用Json.obj()
Json.obj()默认创建空JSON对象,效果和JsObject.empty一致:
import scala.util.Random import play.api.libs.json._ val data1 = (1 to 2) .map {r => Json.toJson(Map( "name" -> Json.toJson(s"Perftest${Random.alphanumeric.take(6).mkString}"), "domainId"->Json.toJson("343RDFDGF4RGGFG"), "value" -> Json.obj()))} val data2 = Json.toJson(data1) println(data2)
两种方式都能生成符合预期的JSON输出,其中Json.obj()更直观,JsObject.empty则明确强调空对象的语义。
内容的提问来源于stack exchange,提问作者RUDRA GANESH SUBBARAYULU
相关产品推荐
相关产品推荐

