码迷,mamicode.com
首页 > Web开发 > 详细

scala json相关操作

时间:2015-05-09 13:24:00      阅读:378      评论:0      收藏:0      [点我收藏+]

标签:

一、前言

  目前准备编写一个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是使用方法吧

 

  

scala json相关操作

标签:

原文地址:http://www.cnblogs.com/liuyuanbo/p/4489704.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!