scala spray.json

Scala 使用spray.json进行解析json

转载请注明 http://blog.csdn.net/wguangliang/article/details/51517415

转换描述如下图



  parseJson               convertTo[T]
 String ----------> JSON AST --------------> Scala types:T


example1

解析

单条json

{"name":"CadetBlue","red":95,"green":158,"blue":160}

json数组

[

{"name":"CadetBlue","red":95,"green":158,"blue":160},

{"name":"CadetRed","red":160,"green":158,"blue":95}

]

import spray.json._
object ScalaDemo_SparyJson {
    def main(args:Array[String]):Unit = {
        case class Color(name:String, red:Int, green:Int, blue:Int)
        object MyJsonProtocol extends DefaultJsonProtocol {
            implicit val colorFormat = jsonFormat4(Color) //4个属性
        }
        import MyJsonProtocol._ 
        //object -> json
        val json = Color("CadetBlue",95,158,160).toJson
        println(json) //{"name":"CadetBlue","red":95,"green":158,"blue":160}
        //json -> object
        val color = json.convertTo[Color]
        println("name:"+color.name+",red:"+color.red+",green:"+color.green+",blue:"+color.blue) //name:CadetBlue,red:95,green:158,blue:160
        
        val jsons = "[{\"name\":\"CadetBlue\",\"red\":95,\"green\":158,\"blue\":160},{\"name\":\"CadetRed\",\"red\":160,\"green\":158,\"blue\":95}]"
        //string -> json -> object
        val colors:List[Color] = jsons.parseJson.convertTo(DefaultJsonProtocol.listFormat[Color])
        colors.foreach { color => 
            println("name:"+color.name+",red:"+color.red+",green:"+color.green+",blue:"+color.blue)
            
        }
        // object -> json
        val listjson = colors.toArray.toJson
        
        //list -> rdd
        //val colorsRdd = sc.parallelize(colors) 
      
        
    }
  
}



example2

json中嵌套json

解析

{
  "name": "John",
  "age": 26,
  "sex": 0,
  "address": {
    "no": "A1",
    "street": "Main Street",
    "city": "Colombo"
  }
}


import spray.json._
object ScalaDemo_SparyJson2 {
    def main(args: Array[String]): Unit = {
        object EnumSex extends Enumeration { //性别枚举类型
            type Sex = Value
            val MALE = Value("MALE")
            val FeMALE = Value("FEMALE")
        }
        
        case class Address(no:String, street:String, city:String)
        case class Person(name:String, age:Int, sex:EnumSex.Sex, address:Address)
        object MyJsonProtocol extends DefaultJsonProtocol {
            implicit val addressFormat = jsonFormat(Address,"no","street","city") //对case class AddressDe 解析 
            implicit val sexJsonFormat = new JsonFormat[EnumSex.Sex] {
                def write(sex: EnumSex.Sex) =  JsObject("sex"->JsNumber(sex.id))
                def read(value:JsValue) = value match {
                    case JsNumber(sex) => EnumSex(sex.toInt)
                    case _ => throw new DeserializationException("person.sex expected")
                }
            }
            implicit val personFormat = jsonFormat(Person, "name", "age", "sex", "address")
        }
        
        import MyJsonProtocol._
        //对address string json的解析
        val jsonStr = """{ "no": "A1", "street" : "Main Street", "city" : "Colombo" }""" 
        val addressObj = JsonParser(jsonStr).fromJson[Address]
        //或者
   		val addressObj2 = jsonStr.parseJson.convertTo[Address]
        println(addressObj.city)
        println(addressObj2.city)
        
        
        val json2 = """{ "name" : "John", "age" : 26,  "sex" : 0 , "address" : { "no": "A1", "street" : "Main Street", "city" : "Colombo" }}"""
        val person = json2.parseJson.convertTo[Person]
        println(json2.parseJson.prettyPrint)
        println(person) //Person(John,26,MALE,Address(A1,Main Street,Colombo))
        println(person.name) //John
        println(person.sex) //MALE 这里是MALE,而不是0
        println(person.address.no) //A1
      
    }
  
}



### 回答1: scala2.12.15.tgz 是 Scala 编程语言的一个发行版本。Scala 是一种多范式的编程语言,结合了面向对象编程和函数式编程的特性。它运行在 Java 虚拟机上,并且可以与现有的 Java 库和框架进行互操作。 scala2.12.15.tgz 是指 Scala 2.12.15 版本的压缩文件。通过将文件解压缩,您可以获取 Scala 编译器、运行时库以及其他必要的文件。这个特定版本的 Scala 在其发布时可能修复了一些错误、改进了性能,或者提供了一些新的功能。 要使用 scala2.12.15.tgz,您可以按照以下步骤进行操作: 1. 下载 scala2.12.15.tgz 文件到您的计算机上。您可以从 Scala 的官方网站或者其他可信的资源下载该文件。 2. 解压缩 scala2.12.15.tgz 文件。您可以使用命令行工具或者压缩工具进行解压缩操作。 3. 设置 Scala 的环境变量。将 Scala 的 bin 目录添加到您的系统的 PATH 环境变量中,以便您可以在任何位置运行 Scala 命令。 4. 验证安装。在命令提示符或终端中输入 "scala -version" 命令,如果您看到版本号为 2.12.15,则说明安装成功。 5. 您现在可以使用 Scala 2.12.15 来编写和运行 Scala 程序了。您可以使用 Scala 的 REPL(交互式解释器)来快速测试代码,也可以使用任何文本编辑器编写代码,并使用 Scala 编译器将其编译成 Java 字节码。然后,您可以在 JVM 上运行生成的字节码。 总之,scala2.12.15.tgz 是 Scala 2.12.15 版本的压缩文件,通过解压缩和设置环境变量,您可以开始使用 Scala 编程语言。 ### 回答2: scala2.12.15tgz 是指 Scala 编程语言的一个特定版本的压缩文件。通常,Scala 的发布版本都会以 ".tgz" 格式提供,以方便用户进行下载和安装。 Scala 是一种现代化的面向对象编程语言,结合了面向对象编程和函数式编程的特性。它被广泛用于构建高性能、可扩展、并发性强的应用程序。Scala 的设计目标是为了提高开发人员的生产力和代码的可维护性。 scala2.12.15tgz 表示 Scala 2.12.15 版本的压缩文件。2.12.15 是 Scala 的一个较旧的版本。每个版本的 Scala 都会引入新的功能、改进性能并修复已知问题。因此,为了保持应用程序的稳定性和兼容性,有时候使用旧版本的 Scala 是有必要的。 要使用 scala2.12.15tgz,首先需要下载该压缩文件,并解压缩到所需的位置。然后,您可以设置环境变量,以便系统可以找到 Scala 的执行文件。接下来,您可以使用命令行窗口或交互式解释器来编写和运行 Scala 代码。 尽管 scala2.12.15tgz 是一个较旧的版本,但它仍然可以用于开发和构建各种类型的应用程序。然而,为了充分利用 Scala 的新功能和改进,建议使用最新版本的 Scala。 总结来说,scala2.12.15tgz 是 Scala 2.12.15 版本的压缩文件,它是 Scala 编程语言的一个特定版本,可以用于开发高性能、可扩展和并发性强的应用程序。 ### 回答3: Scala是一种现代化的编程语言,适用于JVM平台。"scala2.12.15tgz"是指Scala编程语言的一个特定版本的发行包。这个版本号定义了Scala编程语言的主要版本和次要版本,即2.12。这个版本号用于表示Scala编译器、库和其他相关工具的特定版本。而"15"代表修订版本,用于指定该特定版本的修复和更新。"tgz"则是一个常见的压缩文件格式,用于将多个文件或文件夹打包为单个文件,以方便传输和存储。 从这个版本号中,我们可以得出以下信息:这是Scala编程语言的2.12.x系列的第15个修订版本的发行包。这个发行包可能包含了Scala编译器、标准库、文档和其他一些与Scala编程相关的工具。 Scala 2.12系列是Scala编程语言的一系列发行版本,提供了许多新特性、改进和修复。每个修订版本都带来了对语言和库的改进,以提高性能、稳定性和可用性。 对于开发者来说,可以通过下载和安装这个发行包来使用Scala编程语言的特定版本。开发者可以使用Scala编译器将Scala代码编译成字节码,然后在JVM上运行。此外,开发者还可以使用Scala的标准库以及其他第三方库来开发和构建Scala应用程序。 总之,"scala2.12.15tgz"是Scala编程语言2.12系列中的一个特定版本的发行包,开发者可以使用它来开发和构建基于Scala的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值