将Json字符串转换为Json数组Circe Scala?

将Json字符串转换为Json数组Circe Scala?,scala,circe,Scala,Circe,所以我在这里(注意,这在语法上是不正确的,我只是想告诉你这个想法) 如何将circe.JSON字符串转换为circe.JSON数组 

expected js => [“a1”,”a2”]

 函数的目标是将[“a1”,“a2”]作为数组[字节]返回,因为这不是非常典型的情况,circe不提供这种开箱即用的行为,所以您需要实现自己的编码器和解码器。幸运的是,使用这个库相当容易 请参见下面的代码示例: import io.circe._ import io.circe.syntax

所以我在这里(注意,这在语法上是不正确的,我只是想告诉你这个想法)

如何将circe.JSON字符串转换为circe.JSON数组

    

expected js => [“a1”,”a2”]



函数的目标是将[“a1”,“a2”]作为数组[字节]

返回,因为这不是非常典型的情况,
circe
不提供这种开箱即用的行为,所以您需要实现自己的
编码器和
解码器。幸运的是,使用这个库相当容易

请参见下面的代码示例:

import io.circe._
import io.circe.syntax._
import io.circe.generic.auto._

val separator = ","
// Implement own `Encoder` to render array of string as JSON string, separated with comma inside
implicit val encoder: Encoder[Array[String]] = Encoder[String].contramap(_.mkString(separator))

// Implement own `Decoder` to parse JSON string as array
implicit val decoder: Decoder[Array[String]] = Decoder[String].map(_.split(separator))

// Class added for sake of example, because I guess you will use string array as a part of another structure
case class Foo(a: Array[String]) {
  // override toString, because array toString works as default Object toString, which is not really readable
  // Made for example readability, you don't need to do in your code
  override def toString: String = s"Foo(a: ${a.mkString(", ")})"
}

val foo = Foo(Array("a1", "a2"))
val json = foo.asJson

println(json.noSpaces)
println(json.as[Foo])
这将产生下一个结果:

{"a":"a1,a2"}
Right(Foo(a: a1,a2))

希望这有帮助

因为这不是很典型的情况,
circe
不提供这种开箱即用的行为,所以您需要实现自己的
编码器
解码器
。幸运的是,使用这个库相当容易

请参见下面的代码示例:

import io.circe._
import io.circe.syntax._
import io.circe.generic.auto._

val separator = ","
// Implement own `Encoder` to render array of string as JSON string, separated with comma inside
implicit val encoder: Encoder[Array[String]] = Encoder[String].contramap(_.mkString(separator))

// Implement own `Decoder` to parse JSON string as array
implicit val decoder: Decoder[Array[String]] = Decoder[String].map(_.split(separator))

// Class added for sake of example, because I guess you will use string array as a part of another structure
case class Foo(a: Array[String]) {
  // override toString, because array toString works as default Object toString, which is not really readable
  // Made for example readability, you don't need to do in your code
  override def toString: String = s"Foo(a: ${a.mkString(", ")})"
}

val foo = Foo(Array("a1", "a2"))
val json = foo.asJson

println(json.noSpaces)
println(json.as[Foo])
这将产生下一个结果:

{"a":"a1,a2"}
Right(Foo(a: a1,a2))

希望这有帮助

嗨,谢谢你。你什么时候使用编码器和解码器的?感谢you@CodeGeek
解码器
用于将json解析为一些
T
在本例中为数组[字符串]
)和
编码器
,反之亦然,将一些
T
格式化为json。它与其他协议库中的序列化器/反序列化器相同。您好,谢谢。你什么时候使用编码器和解码器的?感谢you@CodeGeek
解码器
用于将json解析为一些
T
在本例中为数组[字符串]
)和
编码器
,反之亦然,将一些
T
格式化为json。它与其他协议库中的序列化器/反序列化器相同。