JSON4S | 学习笔记

简介: 快速学习JSON4S。

开发者学堂课程【2020版大数据实战项目之DMP广告系统(第六阶段)JSON4S】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/681/detail/11828


JSON4S

 

内容介绍:

一、使用 json4s 并导入 json4s 的内容

二、创建 object

三、属性的使用

四、解析

 

介绍一个新的工具,叫做 JSON4S。可以理解为 JSON4S 是一个 scala 当中 jason ATI。这个 json 解析的工具有很多种,现在来简单介绍几种。

首先最为知名的是一个叫做 jackson 的一个工具,还有一个叫做 Gson。这个 gson google 的工具,也比较的知名也是很好用的。还有一个阿里巴巴的叫做 fast json,这个就相对逊色一些。Fast json 在零九年就有,已经出版了很长时间了。总之这三个工具在业界里面用的比较多,现在它们当中的任何一个都不使用,要使用的是 JSON4S。要知道这三个工具都是 json 解析工具。

还有一种工具叫做 jason api。那这个 json api 指的就是 JSON4S,要注意这个 JSON4S 和这些 json 解析工具是有本质区别的。json 解析工具它们本身是具有解析能力的,本来就是 json 解析的工具。

它们自己有算法去解析 json。但是这个 json api 不一样,它不具备 json 解析能力。那 json api 主要是提供语法,内部调用 Json 解析工具进行 Json 的解析。

一定不要混淆这个 JSON4S 并不是一个 json 解析工具,它是 scala 当中的一个 Json api,它是一个公用的 api

这个 JSON4S 比较倾向于调用 jackson,它直接就库支持 jackson 直接调用,所以还是比较强的。

它这个思路其实是对的,做 json 解析,虽然要把 json 解析搬到 scala 里头确实有一些障碍,因为 scala 当中的对象体系和 java 里面会有一点点区别。但是如果要自己造轮子再造一套 json 解析的工具,性能很难比过这些老牌的工具。所以它就另辟蹊径,既然 json 解析在 scala 里面并不是特别的方便,那么提供一套 api。这套 api 内部调用那些老牌的解析工具,并且性能跟它们一样,这种方式是比较好的。

 

一.使用 json4s 并导入 json4s 的内容

如果想要去使用 JSON4S,就必须先导入 JSON4S 的内容。先去导入这个 JSON4S,再进入到 idea 当中,如下图:

 

4.1.png

 

然后打开 pom 文件,把其他的文件关掉,导入一个 dependency dependency 叫做 json4s。找到 jacksonjackson2.11 这样的一个版本,选 3.6.5 或者 3.6.6 都可以,这里选择 3.6.6,这样就导完了。

4.2.png

 

接下来就可以去使用 JSON4S 了,再进入到笔记当中去拷贝一个 json 字符串,把它拷贝完再去解析这个字符串。如图所示:

4.3.png

先进入到 idea 当中,在 test 里头找到http test。那么在 http test 当中,有 Json这样的一个方法,给它标注一个 test,把 sql 语句导进来。

 

二.创建 object

导进来以后第一件事情要把 Json string 转为一个 Scala object,那么 Json 有了,object 还没有,所以要先创建出来 object

先定义一个 case class,这个 case class 就叫做 Gaode。需要定义的属性首先这个高德就应该对应整个 jason 最外层。它里面至少要有一个 info,所以写上一个 in fo 对应 string 这个类型。第二个属性叫做 infocode 要注意这个名字必须要完全一致才行。infocode 虽然它看着是一个数字,但是它后面是带有引号的,所以它还是一个字符串类型。

接下来有一个 starts,同理这个 starts 还是一个字符串类型。现在已经写了三个属性,可以发现它里面还有一个属性叫做 regeocode

这个属性怎么使用?这个属性里面是一个单纯的数据类型吗?它不是。它又是一个 json 对象,所以再输入 case class,这个 case class 就叫做 regeocode。如图所示:

4.4.png

 

这个 class 当中,regeocode 的对象对应的是这个 regeocode 的这个对象。

1)首先第一个属性叫做 countryCountry 它是什么类型?是一个 string 类型。

2)第二个属性是 town ship,它是什么类型?也是一个 string 类型。

3)还有一个属性叫做 Business areas。如下图:

 

4.5.png

这是一个数组,这个数组里的第一项是一个 object,就应该把它们抽象成一个对象,这个对象就给它命名为叫做 business area。也是最重要的一个对象。

这个 business area 当中要有这个 location,把 location 写出来。location 对应的它的类型也是一个 string 类型,名字也是一个 string 类型的。I D 是什么?如果不感兴趣这些 I D 和这些 location,那么可以直接不输入,只写一个名字,只要对应上属性下面的名字就可以了。

 

三.属性的使用

一个一个往前回溯,首先 business areas 它是 regeocode 的属相,复制这个属相,放在如下代码这里。

Case class Regeocode(country:string,township:string, business Areas:)

它是一个 business Areas。那它就是这个类型的一个对象。但是真的是这样吗?它明显不是,这里是一个数组,所以这里也必须得是一个数组才可以,再把它写进去。这样其实还没有完成,如果给了一个错误的 location,这个 business Areas 里可能根本就没有任何数据,list 可能根本就不存在,这个属性也可能根本就不存在。 既然是这样,那么 country这个属性也有可能不存在,把 country township直接去掉,因为只关心它商圈的信息。如果 list 有可能为空的话,正常情况下使用这个 json4s 解析一个空的 business Areas 时它会报错。把它剪切一下,放在 Option 里,这样就可以。当没有这个 option 就是一个 name。可以不关心 info,所以这个 info 是可以不要的。接下来这个 infocode status 还是关心一下比较好,但是这个 gaode 和这个 Regeocode 这两个对象之间是没有关系的,能注意到 gaode 的对象里有一个属性,叫做 Regeocode 对应的就是它。那这个对象也有可能是不存在的,所以也给它一个 option

option 里面是是一个 Regeocod。那么这时整体上这三个对象就已经编写好了,就可以进行解析了。但是这三个对象三个 case class 的生成不能放在 json 这个方法当中,必须把它挪到这个类外面,要不然解析会出错。而且必须要让这个框架能够访问到才行。这样就没有问题了,没有问题以后就可以进行具体的解析了。

 

四.解析

可以使用一个对象,或者使用一个类,那先使用一个对象,叫做 serialization。接着找到 json4s,是这样的一个 serialization,是一个 object

4.6.png

其中有一个方法叫做 read,要传进去一个字符串,这个字符串就是 Json,那么想 read 到什么类型里头呢?就在这写上 gaode,这时就可以直接得到高德这样的对象。但是这个地方报红线,一般报这种红线都是缺少一个隐视转换,这里也缺少一个隐视转换,是一个影视参数,那么就可以直接使用 Implict,建一个 formats

接下来这个 formats 应该使用 serialization 其中有一个内容叫做 formats,这个 formats 里要指定一些内容。

formats 是干什么用的呢?比如在这个 Json 当中,有一些时间是比较特殊的,那这个特殊的格式,怎么去解析呢?怎么解析成一个Date 的对象呢?就可以使用 formats 传入一个对应的解析类,这个解析类就包含了一些特殊的解析规则,是可以自定义的,但是现在是没有自定义需求的,就直接给一个 NoTypeHints

这时把这个代码写完了。如下代码所示:

Implicit val formats =serialization.formats(NoTypeHints)

Val gaode= serialization.read(gaode)(json)

写完了后再继续向下看,那就直接打印一下高德这个对象。打印完这个高德对象以后来运行一下整段代码看一看结果是怎么样的。

 

4.7.png

 

看到对象内容已经打印出来了,首先第一个是一万,就是 code status,然后是 1,接下来是这个 Some,里面有一个 regeocode,一个 Some,又是一个 list,又有 business。这样就已经解析成功没有任何问题了。

这个章节就告一个段落,下一个章节把这个功能挪到 HTTP 里,正式的再解析一份新的 json。这个 json 的解析是需要练习的,而且这个技术点非常的重要,如果不能理解 json 解析,那么在以后基本上是没有办法进行工作的。所有的项目当中基本上或多或少都有一些 json 解析的功能。

相关文章
|
3月前
|
JSON 前端开发 JavaScript
JSON 必知必会
JSON 必知必会
|
1月前
|
存储 JSON JavaScript
JSON应用
JSON应用
28 4
|
3月前
|
XML JSON JavaScript
|
4月前
|
JSON 前端开发 JavaScript
JSON小技巧
JSON小技巧
25 0
|
10月前
|
数据格式 JSON JavaScript
JSON是什么?
JSON 全称“JavaScript Object Notation”,译为“JavaScript 对象简谱”或“JavaScript 对象表示法”,是一种轻量级的、基于文本的、开放的数据交换格式。JSON 在 Web 开发领域有着举足轻重的地位,如果您想在 Web 开发领域大展身手的话,就必须了解 JSON。
|
XML JSON 前端开发
json笔记
1.JSON简介: 2. JSON特点: 3.转义符
|
JSON 前端开发 Java
json 的实现 | 学习笔记
快速学习 json 的实现,介绍了 json 的实现系统机制, 以及在实际应用过程中如何使用。
106 0
json 的实现 | 学习笔记
|
JSON fastjson 数据格式
json是什么,看了之后我才恍然大悟(二)
3. 返回一个List集合 4. 返回一个时间 (重要) 5. FastJson
json是什么,看了之后我才恍然大悟(二)
|
JSON JavaScript 前端开发
JSON学习笔记(三、使用)
JSON学习笔记(三、使用)
104 0