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

时间:2015-12-09 12:09:57

标签: json scala

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

Yii::$app->session->get('session');

我得到以下输出:

`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)
 }`

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

感谢任何帮助。其他类似的答案没有帮助。

3 个答案:

答案 0 :(得分:0)

由于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)
}

现在输出是:

  

{"":[" M"" N&#34]," B":" OK" }

答案 1 :(得分:0)

你可以尝试

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

gson可以解析数组类型 输出将是: { “一”:[ “一”, “B”], “B”: “C”}

答案 2 :(得分:-1)

尝试jsoniter-scala,它支持所有 Scala集合,它也是Scala的JSON最有效的序列化程序。这里有results of benchmarks比较解析&使用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"))