【问题标题】:Scala - Couldn't remove double quotes for Key -> value "{}" braces while building JsonScala - 在构建 Json 时无法删除 Key -> value \"{}\" 大括号的双引号
【发布时间】:2022-10-20 13:58:16
【问题描述】:

Scala - 构建 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",“价值”:”{}”},{"name":"PerftestHoZSQR","domainId":"343RDFDGF4RGGFG",“价值”:”{}”}]

预期的: “价值”:{}

[{"name":"PerftestpXI1ID","domainId":"343RDFDGF4RGGFG",“价值”:{}},{"name":"PerftestHoZSQR","domainId":"343RDFDGF4RGGFG",“价值”:{}}]

请提出解决方案

【问题讨论】:

    标签: json scala generics gatling stringescapeutils


    【解决方案1】:

    你给它一个String,所以它在 J​​SON 中创建一个字符串。你真正想要的是一个空字典,它是 Scala 中的 Map:

    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(Map.empty[String, String])))}
    

    更一般地,您应该为数据创建一个case class 并为该类创建一个自定义的Writes 实现,这样您就不必在每个值上调用Json.toJson。


    以下是仅使用单个 Json.toJson 调用进行转换的方法:

    import play.api.libs.json.Json
    
    case class MyData(name: String, domainId: String, value: Map[String,String])
    implicit val fmt = Json.format[MyData]
    
    val data1 = (1 to 2)
      .map { r => new MyData(
          s"Perftest${Random.alphanumeric.take(6).mkString}",
          "343RDFDGF4RGGFG",
          Map.empty
        )
      }
    val data2 = Json.toJson(data1)
    println(data2)
    

    value 字段可以是标准类型,例如Boolean 或Double。只要新类型有类似的Json.format 行,也可以是另一个case class 来创建嵌套JSON。

    可以使用文档中描述的自定义Writes(和Reads)实现来生成更复杂的 JSON。

    【讨论】:

    • 如何在此处处理非字符串值,如日期、布尔值或双精度值 "value" ->Json.toJson(Map.empty[String, String])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    相关资源
    最近更新 更多