簡體   English   中英

使用gson庫將Scala Seq對象轉換為JSON

[英]Scala Seq Object to JSON using gson Library

我正在嘗試執行以下操作:

`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.Seqjava.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”:“確定”}

你可以試試

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

gson可以解析Array類型,輸出為:{“ a”:[“ a”,“ b”],“ b”:“ c”}

嘗試jsoniter-scala ,它支持所有 Scala集合,這也是Scala到JSON的最有效的序列化器。 以下是基准測試的結果,這些基准測試比較了該庫與使用JDK 8的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"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM