Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4427797
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: Java

2021-02-25 10:14:42

scala 自带json模块

import scala.util.parsing.json
不用第三方包, 解析和拼接都不好控制

# map -> scala.util.parsing.json.JSONObject
scala.util.parsing.json.JSONObject(map).toString() # list -> scala.util.parsing.json.JSONArray
scala.util.parsing.json.JSONArray(list).toString() 
# json -> map import scala.util.parsing.json.JSON import scala.util.parsing.json.JSONObject

val colors:Map[String,Object] = Map("red" -> "123456", "azure" -> "789789") val json = JSONObject(colors) println(json) val jsonMap = JSON.parseFull(json.toString).get.asInstanceOf[Map[String,Object]] println(jsonMap) /* ---------------------------------------- */ val jsonStr = """{"username":"Ricky", "age":"21"}""" val jsonValue = JSON.parseFull(jsonStr) val jsonObj = jsonValue match { case Some(map:Map[String, Any]) => map.asInstanceOf[Map[String,String]] case _ => println("ERROR jsonStr") } val username = jsonObj.get("username") 
import scala.util.parsing.json.JSON val jsonStr = """{"username":"Ricky", "attribute":{"age":21, "weight": 60}}""" val jsonValue = JSON.parseFull(jsonStr) val jsonObj = jsonValue match { case Some(map:Map[String, Any]) => map case other => println("Error jsonStr") } // 将attribute转换成Map val attrObj = jsonObj.get("attribute").get.asInstanceOf[Map[String, String]] val age = attrObj.get("age") 

json4s

<dependency> <groupId>org.json4sgroupId> <artifactId>json4s-jackson_${scala.version}artifactId> <version>{latestVersion}version> dependency> 

官网地址:
生成和解析json的过程都有些麻烦, 不能直接生成一个map或list
JObject解析, 但json和xml格式可以互转

# json -> List import org.json4s._ import org.json4s.jackson.JsonMethods._ var temp = new ListBuffer[(String, Long, Int)] val dataLog = parse(x.toString) for {JObject(child) <- dataLog JField("url", JString(url)) <- child JField("time", JInt(time)) <- child JField("origin", JInt(origin)) <- child if origin.toDouble.toInt >= 1 } temp += Tuple4(url, time.toDouble.toLong, origin.toString.toDouble.toInt) 

样例类解析

scala> import org.json4s._
scala> import org.json4s.jackson.JsonMethods._

scala> implicit val formats = DefaultFormats // Brings in default date formats etc. scala> case class Child(name: String, age: Int, birthdate: Option[java.util.Date]) scala> case class Address(street: String, city: String) scala> case class Person(name: String, address: Address, children: List[Child]) scala> val json = parse(""" { "name": "joe", "address": { "street": "Bulevard", "city": "Helsinki" }, "children": [ { "name": "Mary", "age": 5, "birthdate": "2004-09-04T18:06:22Z" }, { "name": "Mazy", "age": 3 } ] } """) scala> json.extract[Person] res0: Person = Person(joe,Address(Bulevard,Helsinki),List(Child(Mary,5,Some(Sat Sep 04 18:06:22 EEST 2004)), Child(Mazy,3,None))) scala> val addressJson = json  \ "address" // Extract address object scala> addressJson.extract[Address] res1: Address = Address(Bulevard,Helsinki) scala> (json \ "children").extract[List[Child]] // Extract list of objects res2: List[Child] = List(Child(Mary,5,Some(Sat Sep 04 23:36:22 IST 2004)), Child(Mazy,3,None)) 

json拼接

# map -> json object JsonExample extends App { import org.json4s._ import org.json4s.JsonDSL._ import org.json4s.jackson.JsonMethods._

  case class Winner(id: Long, numbers: List[Int]) case class Lotto(id: Long, winningNumbers: List[Int], winners: List[Winner], drawDate: Option[java.util.Date]) val winners = List(Winner(23, List(2, 45, 34, 23, 3, 5)), Winner(54, List(52, 3, 12, 11, 18, 22))) val lotto = Lotto(5, List(2, 45, 34, 23, 7, 5, 3), winners, None) val json = ("lotto" -> ("lotto-id" -> lotto.id) ~ ("winning-numbers" -> lotto.winningNumbers) ~ ("draw-date" -> lotto.drawDate.map(_.toString)) ~ ("winners" -> lotto.winners.map { w => (("winner-id" -> w.id) ~ ("numbers" -> w.numbers))})) println(compact(render(json))) } scala> JsonExample {"lotto":{"lotto-id":5,"winning-numbers":[2,45,34,23,7,5,3],"winners": [{"winner-id":23,"numbers":[2,45,34,23,3,5]},{"winner-id":54,"numbers":[52,3,12,11,18,22]}]}} 

gson

https://blog.csdn.net/shuaidan19920412/article/details/79356440

json <-> case class

import com.google.gson.Gson
case class Student( name:String , no: String ) val gson = new Gson val student = Student("张三", "100") val str = gson.toJson(student, classOf[Student]) println(str) val student2 = gson.fromJson(str, classOf[Student]) println(student2) 

json <-> javaMap

// 注意这里只能是java的HashMap 或者其子类LinkedHashMap, TreeMap // 经实验 scala的Map 以及 java.util.Map 都会有问题的 val map = new java.util.HashMap[String, Object]() map.put("abc", List(s1,s2).toArray) val gson = new Gson() println( gson.toJson(map) ) 
判断json
def isGoodJson(json: String):Boolean = { if(null == json) { return false } val result = JSON.parseFull(json) match { case Some(_: Map[String, Any]) => true case None => false case _ => false } result } 

spray-json

<dependency> <groupId>io.spraygroupId> <artifactId>spray-json_${scala.version}artifactId> <version>1.3.2version> dependency> 
val json = JsonParser(result).asJsObject() println(json.getFields("name"))


作者:点点渔火
链接:
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

阅读(487) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~