使用gson库将Scala Seq对象转换为JSON



我正在尝试执行以下操作:

`import com.google.gson.Gson
 object someObject extends App{
      case class entries(a:Seq[String], b:String){
         def toJson() = new Gson().toJson(this)
      }
      val one : Seq[String] = List("m","n")
      val two : String = "ok"
      val ans = entries(a = one, b = two)
      println(ans.toJson)
 }`

我得到以下输出:

 `{"a":{},"b":"ok"}`

我能知道为什么我不能将seq转换为json吗?我尝试了其他库,包括spray.json和json4s,但没有任何帮助。为此尝试了很多。

感谢您的帮助。其他类似的答案也于事无补。

由于Gson库是一个Java库,我会尝试使用Java集合而不是Scala集合。用java.util.List代替scala.collections.Seq,用java.util.ArrayList代替scala List,您应该得到正确的输出:

import com.google.gson.Gson
import scala.collection.JavaConversions._
import java.util.ArrayList
import java.util.List
object someObject extends App {
  case class entries(a: List[String], b: String) {
    def toJson() = new Gson().toJson(this)
  }
  val one: List[String] = new ArrayList[String]
  one.add("m")
  one.add("n")
  val two: String = "ok"
  val ans = entries(a = one, b = two)
  println(ans.toJson)
}

现在的输出是:

{"a":["m","n"],"b":"ok"}

您可以尝试

case class Entry(a:Array[String], b:String)
val e = Entry(Array("a", "b"), "c")
val gson = new Gson
println(gson.toJson(e))

gson可以解析数组类型输出将是:{"a":["a","b"],"b":"c"}

试试jsoniter scala,它支持所有scala集合,也是scala最有效的JSON序列化器。以下是比较分析&与使用JDK8的Jackson、Circe和Play JSON库相比,该库的序列化性能。

将库添加到您的依赖项列表

libraryDependencies ++= Seq(
  "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-core" % "0.29.2" % Compile, 
  "com.github.plokhotnyuk.jsoniter-scala" %% "jsoniter-scala-macros" % "0.29.2" % Provided // required only in compile-time
)

为案例类、集合等生成编解码器。

import com.github.plokhotnyuk.jsoniter_scala.macros._
import com.github.plokhotnyuk.jsoniter_scala.core._
case class entries(a: Seq[String], b: String)
implicit val codec: JsonValueCodec[entries] = JsonCodecMaker.make[entries](CodecMakerConfig())

现在您可以使用它来序列化

writeToArray(entries(a = Seq("m", "n"), b = "ok"))

最新更新