scala json相关操作

一、前言
  目前准备编写一个scala项目基础类库,有这样一个需求,将String类型的Json转为Map或其他扩展对象。
二、几种方法探讨
  1)scala自带的Json解析
  scala 2.10(以上,其他版本不清楚)自带Json解析,scala.util.parsing.json.JSON
     使用方法如下:
val json = JSON.parseFull(string)
  作为一个python,php转过来的同学,期待这句话的执行结果是一个Map(json),Map里面按照实际的字符串解析成一个复杂的List,Map嵌套结构,但是这句话返回的是一个Option,没有明确的类型,如果要获取其中的结构,你得这样写代码(代码来源:stackoverflow)
val json:Option[Any] = JSON.parseFull(jsonString)
val map:Map[String,Any] = json.get.asInstanceOf[Map[String, Any]]
val languages:List[Any] = map.get("languages").get.asInstanceOf[List[Any]]
languages.foreach( langMap => {
val language:Map[String,Any] = langMap.asInstanceOf[Map[String,Any]]
val name:String = language.get("name").get.asInstanceOf[String]
val isActive:Boolean = language.get("is_active").get.asInstanceOf[Boolean]
val completeness:Double = language.get("completeness").get.asInstanceOf[Double]

  相当反人类,解析过程和json字符串是一个紧耦合,换个字符串又要重新写一套代码。该stackoverflow帖子给出的答案,也没做到解耦。
      使用模式匹配如:case Some(map: Map[String, Any]) => println(map),编译过程会有warning,据分析jvm在执行的时候会擦除类型(作为一个新手不太懂,请指教),这个过程也很繁琐。
  2)scala 第三方类库
  使用第三方类库的麻烦在于,项目的实际执行环境可能没有所需的库,需要加path或者将该类库打包到该项目中。对于一个编写项目基础库的强迫症患者来讲,为了一个功能增加一个大而全的第三方库是相当难以接受的,无奈自己的scala水平相当初级,没有能力自己实现。我在网上找到一个比较轻量级的Json第三方类库,spray-json,jar包解开,大概有14个scala源文件,github项目地址:链接,maven引用方法如下:
<dependency>
      <groupId>io.spray</groupId>
      <artifactId>spray-json_2.10</artifactId>
      <version>1.3.2</version>
</dependency>

sbt引用方法如下:
libraryDependencies += "io.spray" %%  "spray-json" % "1.3.2"
下面主要介绍一下spray-json是使用方法:
    
/*假设result是Json字符串*/
val result = http.get(url)
val json = JsonParser(result)
val jsObj = json.asJsObject()
println(jsObj.getFields("code"))
  日常使用已经足够了,spray-json可以将json对象转为自定义的对象,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值