有很多用于 Scala 的 JSON 读取器/写入器,但您不希望 JSON 直接对应于您的数组(因为您只需要使用 JSON 数组!)。
手动转义字符串有点烦人,因此最简单的方法是将数据粘贴到某个 JSON 库中的 JSON 数据结构中。
就我个人而言,我喜欢 Jawn,你会这样使用它。将以下内容添加到您的 build.sbt 文件中(假设您使用的是 SBT):
resolvers += Resolver.sonatypeRepo("releases")
libraryDependencies += "org.spire-math" %% "jawn-parser" % "0.8.3"
libraryDependencies += "org.spire-math" %% "jawn-ast" % "0.8.3"
那么假设你有
val myarray = Array(("abc",25),("efd",20))
用手拉出你想要的碎片,然后把它们装进下巴里
import jawn.ast._
def arrAsObj[A, B <: JValue](arr: Array[A])(f: A => B) = JObject(
collection.mutable.ListMap(
arr.zipWithIndex.map{ case (a, i) => i.toString -> f(a) }: _*
)
)
// It's hard to do this in a loop unless you use Shapeless!
val ma0 = arrAsObj(myarray.map(_._1))(x => JString(x))
val ma1 = arrAsObj(myarray.map(_._2))(x => LongNum(x))
val json = arrAsObj(Array(ma0, ma1))(identity)
已经有它的.toString 做你想做的事了:
scala> val json = arrAsObj(Array(ma0, ma1))(identity)
json: jawn.ast.JObject =
{"0":{"0":"abc","1":"efd"},"1":{"0":25,"1":20}}
您可以找到 AST here 的案例类,以便为不太像玩具的示例选择正确的案例类。
这远非唯一的方法,但除非你想自己生成 JSON(不是很难,但你可能至少想使用 JSON 库来正确转义字符串),它会遵循相同的通用形式:将您的数据放入 JSON 树结构中,然后生成文本。