介绍
这篇文章主要介绍Java开发工具之scala处理json格式利器的示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1。为什么是json4s
从json4s的官方描述
此时至少有6 json库scala,不包括java json库。所有这些库都有非常相似的AST。该项目旨在提供一个AST其他scala使用json库。此刻
引用>
的方法被使用AST取自lift-json和本机方案实际上是lift-json但电梯外的项目。在scala库中,至少有6个json库,并且不包括java的json库,这些库都有着类似的抽象语法树AST, json4s的目的就是为了使用简单的一种语法支持这些json库,因此说json4s可以说是一种json的规范处理,配合scala开发过程中极其简介的语法特性,可以轻松地实现比如json合并,json的diff操作,可以方便地处jsonArray理的字符串,所以如果使用scala,那么json4s一定不能错过,在实际场景下使用json处理数据很常见,比如火花开发中处理原始json数据等等,开始上手可能看起来比较复杂,但是用起来你会很爽。
2。json4s的数据结构
json4s包括10个类型和一个类型类型的对象,分别如下
case object JNothing extends JValue //, & # 39;零度# 39;for JValue case object  JNull extends  JValue case class  JString (s:字符串),extends JValue case class  JDouble (num:双),extends JValue case class  JDecimal (num:, BigDecimal), extends JValue case class  JInt (num:,长整型数字),extends JValue case class  JLong (num:长),extends JValue case class  JBool(价值:布尔),extends JValue case class  JObject (obj:列表[JField]), extends JValue case class  JArray(加勒比海盗:列表[JValue]), extends JValue , type JField =,(字符串,JValue)可以看的到,他们都继承自JValue, JValue是json4s里面类似于java的对象地位,而JField是用来一次性匹配json的关键,对价值而准备的。
3。json4s的实践
下面来看,我们如何来使用json4s
& lt; dependency> ,& lt; groupId> org.json4s ,& lt; artifactId> json4s-native_2.11 ,& lt; version> 3.7.0-M6 & lt;/dependency>看下面的代码即可,注释写的比较清晰,一般来说json的使用无外乎是字符串到对象或者对象到字符串,而字符串到对象可以用例类也可以用原始的比如上面提到的类
package com.hoult.scala.json4s import org.json4s._ import org.json4s.JsonDSL._ import org.json4s.native.JsonMethods._ object Demo1  { ,def 主要(args:数组[String]):, Unit =, { ,//解析方法表示从字符串到json对象 ,val person =, parse ( “才能”;“ |才能{“name":“Toy",“price": 35.35} |“才能”;“.stripMargin,, useBigDecimalForDouble =, true) ,//1。模式匹配提取,,\表示提取 ,val JString(名字),=,(\ person “name") ,println(名字) ,//2.提取[String]取值//,implicit val formats =org.json4s.Formats ,implicit val formats =DefaultFormats ,val name2 =, (\ person “name") .extract(字符串) ,val name3 =, (\ person “name") .extractOpt(字符串) ,val name4 =, (\ person “name") .extractOrElse (“”)//大敌;3。多层嵌套取值 ,val parseJson: JValue =,解析( “才能”;“ |才能{“name": {“tome":“new"},“price": 35.35} |“才能”;“.stripMargin,, useBigDecimalForDouble =, true) ,//3.1逐层访问 ,val value =, (\ parseJson “name", \,“tome") .extract(字符串)//3.2大敌;循环访问 ,val value2 =,(时间\ \ parseJson “tome") ,println (value2)//4。嵌套json串解析 ,val json =, parse ( “才能”;“ ,,{,“name":“joe", ,才能“children":, ,,,{ ,,,“name":,“Mary" ,,,“age": 20 ,,,}, ,,,{ ,,,“name":,“Mazy" ,,,“age": 10 ,,,} ,,,) ,,} “““才能)//,println (json \,“children") ,//模式匹配 ,for (JArray(孩子),& lt;作用;json), println(孩子) ,//提取object 下,某字段的值 ,val ages =, for { JObject才能(孩子),& lt;作用;json JField才能(“age",, JInt(年龄),& lt;作用;儿童 ,},油品收率的年龄 ,println(年龄) ,//嵌套取数组中某个字段值,并添加过滤 ,val nameAges =, for { JObject才能(孩子),& lt;作用;json JField才能(“name",, JString(名字)),& lt;作用;儿童 null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullscala的Java开发工具之处理json格式利器的示例