Spray(4)spray-json
Installation
It is available from the repository and based on sbt.
"spray repo" at "http://repo.spray.io/",
"io.spray" % "spray-json_2.10" % "1.2.3",
Sometimes there is a trailing "cross CrossVersion.full" modifier for SBT 0.12.x
Check my version
>sbt sbt-version
0.12.1
Usage
First of all, Import the packages
import spray.json._
import spray.httpx.SprayJsonSupport
Define the Object
object EnumSex extends Enumeration {
type Sex = Value
val MALE = Value("MALE")
val FEMALE = Value("FEMALE")
}
case class Address(streetNumber: String, street: String, city: String)
case class Person(userName: String, age: Int, sex: EnumSex.Sex, address: Address)
case class Color(name: String, red: Int, green: Int, blue: Int)
Then I can parse the string to AST abstract Syntax Tree(AST).
1. String to AST
valjson1 = """{ "streetNumber": "A1", "street" : "Main Street", "city" : "Colombo" }"""
valjson2 = """{ "name" : "John", "age" : 26, "sex" : 0 , "address" : { "streetNumber": "A1", "street" : "Main Street", "city" : "Colombo" }}"""
//string to AST
valaddressAST = json1.asJson //or JsonParser(source)
valpersonAST = json2.asJson
2. AST to String
//AST to string
println(addressAST.compactPrint) //or .compactPrint
println(personAST.prettyPrint)
3. AST to Object
import AddressJsonProtocol._
//AST 2 Object
val address1 = addressAST.convertTo[Address]
4. Object to AST
//Object 2 AST
valaddressAST2 = address1.toJson
Some other examples:
import ColorProtocol._
//Object 2 AST
val colorAST = Color("CadetBlue", 95, 158, 160).toJson
//AST 2 Object
val color1 = colorAST.convertTo[Color]
For the step3 and step4, we can not directly use that. We need to implement and import the DefaultJsonProtocol.
object ColorProtocol extends DefaultJsonProtocol {
implicit val colorFormat = jsonFormat4(Color)
}
object AddressJsonProtocol extends DefaultJsonProtocol with SprayJsonSupport {
implicit object AddressJsonFormat extends RootJsonFormat[Address] {
def write(address: Address) = JsObject(
"streetNumber" -> JsString(address.streetNumber),
"street" -> JsString(address.street),
"city" -> JsString(address.city))
def read(jsAddress: JsValue) = {
jsAddress.asJsObject.getFields("streetNumber", "street", "city") match {
case Seq(JsString(streetNumber), JsString(street), JsString(city)) =>
new Address(streetNumber, street, city)
case _ => throw new DeserializationException("Address expected")
}
}
}
}
References:
https://github.com/spray/spray-json
https://github.com/jestan/spray-json-examples
分享到:
相关推荐
spray-json-refined 一个集成了和给定JsonFormat[T]实例,此库派生JsonFormat[T Refined P]实例安装支持Scala版本: 2.13 , 2.12 将以下内容添加到您的build.sbt : libraryDependencies += "io.github.typeness" %...
spray-json-shapeless 自动派生 JsonFormat S,搭载(无宏被创建这个库的过程中写入)。 有关文档,请 ,有关示例,请。 购票前,请仔细阅读文档和示例。 TL; DR libraryDependencies + = " ...
AndroidAsync.zip,用于Android的异步套接字、HTTP(客户端 服务器)、WebSocket和socket.io库。基于nio,而不是threads.asynchronous socket、http(client server)和android的websocket库。基于nio,而不是线程。
标题 "slick-pg_spray-json_2.10-0.5.2.2.zip" 暗示了这是一个与数据库交互相关的开源项目,结合描述中的 "hazelcast-clusterstore.zip",我们可以推断出这可能是一个利用Slick-PG、Spray-JSON库以及Hazelcast集群...
spray-json 框架是 Scala 语言中的一个轻量级、高效的 JSON 处理库,主要用于解析和生成 JSON 数据。这个框架强调无侵入性,因为它不依赖于反射,而是利用类型类来实现自定义对象的序列化和反序列化。在 Scala 中,...
spray-json 框架是 Scala 语言中用于处理 JSON 的一个开源库,因其轻量级、高效且无外部依赖的特性而受到开发者欢迎。它提供了简单易用的 API,使得在 JSON 字符串、JSON 抽象语法树(AST)和自定义的 Scala 类型...
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
在 Scala 开发中,play-json 提供了与 Play Framework 集成的 JSON API,而 json4s 则是一个轻量级的 JSON 处理库,它提供了多种 JSON 库(如 Jackson、 spray-json 和 argonaut)的统一接口。这里的 "2.11" 表示这...
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用