我是靠谱客的博主 真实百合,这篇文章主要介绍JSON与FastJSON详解,现在分享给大家,希望可以做个参考。

文章目录

    • JSON
      • JSON简介
      • JSON基本格式
      • JSON语法规则
      • JSON值的类型
      • JSON范例
    • FastJSON
      • FastJSON简介
      • 对象序列化
        • 使用FastJSON序列化对象
      • 使用FastJSON反序列化对象
        • 反序列化为具体对象
        • 反序列化为Map
        • 反序列化为List

JSON

JSON简介

JavaScript Object Notation(JavaScript 对象表示法)是目前最常用的执行对象序列化的方式。

虽然 json 最初是为了在 JavaScript 语言中使用的,但实际上 json 本身跟语言没有任何关系,各种编程语言都可以使用。
json官方指定了一套标准,各种语言都支持这一套标准,所以 json 也能作为一种跨语言的文本数据(即不支持其它多媒体)交换格式,无障碍的把数据传递到其它语言的程序。

JSON基本格式

必须是:对象
{
}
或 数组
[
]

JSON语法规则

数据用 名称 : 值 (也叫键值对) 表示

名称(键)必须是字符串
键、值之间用冒号 “:” 分隔。
多条数据之间,用逗号 “,” 分隔
注意符号都是半角,不要因为输入法的原因输入全角了

JSON值的类型

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在中括号中)
  • 对象(在大括号中)
  • null
  • 值可以是数组、对象,就意味着数据和对象可以任意嵌套、任意深度。

JSON范例

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
{ "name": "韦小宝", "age": 26, "height": 182.4, "birthday": "1670-7-28", "isRich": true, "wifes": ["阿珂", "双儿", "建宁公主", "苏荃", "沐剑屏", "曾柔", "方怡"], "firstMaster": { "name": "陈近南", "birthday": "1634-12-1" } }

FastJSON

FastJSON简介

在 Java 程序中如何操作和使用 json 呢?最常见的是使用 FastJSON
astJSON 是一个Java语言编写的高性能、功能完善、完全支持官方标准的 JSON 库。
使用 FastJson 来操作 json 以及完成对象序列化、反序列化的操作,会非常方便。

对象序列化

下面我们来看一下使用 FastJSON 进行对象序列化的例子。
如果是本地的 IDE 环境,在编码之前,需要引入依赖:

复制代码
1
2
3
4
5
6
7
<!-- 在下列地址查询最新的版本:https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency>

注释中的URL,可以查询最新的版本号。一般来说版本号越高,说明越新。但应避免使用带有 alpha beta 标记的版本,表示测试版可能不稳定。

使用FastJSON序列化对象

首先必须 import

复制代码
1
2
import com.alibaba.fastjson.JSON;

然后就可以实现啦

复制代码
1
2
3
4
5
6
7
8
public static void main(String[] args) { Building b = new Building(); b.setName("创业大厦"); b.setAddress("天宁兰陵兰陵路26号 "); String content = JSON.toJSONString(b); System.out.println(content); }

调用 JSON.toJSONString(dog) 方法,把 Building 对象转换为 JSON 格式的字符串返回。

使用FastJSON反序列化对象

所谓序列化,就是将对象转换为 JSON 格式字符串的过程,那么顾名思义,反序列化就是将 JSON 格式字符串还原为对象的过程。

序列化使用的是 fastjson 库,那么反序列化同样也使用 fastjson 库。
反序列化代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) { Building b = new Building(); b.setName("创业大厦"); b.setAddress("天宁兰陵兰陵路26号"); String content = JSON.toJSONString(b); // 转换为一个具体的对象 Building b2 = JSON.parseObject(content, Building.class); String name = b2.getName(); System.out.println(name); // 特殊情况下,java系统里没有具体对象的 class ,可以反序列化为 Map Map bInfo = JSON.parseObject(content, Map.class); String name2 = (String) bInfo.get("name"); System.out.println(name2); }

反序列化为具体对象

反序列化时,调用 JSON.parseObject(content, Building.class) 把字符串转换为 Java 对象。

第一个参数是字符串内容

第二个参数是目标类

转换为具体的对象后,就可以使用对象的属性和方法了,例如调用 b2.getName(); 取值。

反序列化为Map

少数复杂的场景,程序需要把字符串转换为对象,但是系统中又没有依赖具体的目标类。这时可以把字符串转换为 Map 对象。

第二个参数改为 Map 作为目标类即可。

大家都知道,Map 是接口,而接口是不能直接实例化的,必须有个类实现接口才能实例化。那么为什么这里可以写 Map 接口呢,反序列化后的结果到底是什么呢?

Java 的特点是“面向接口编程”,这就意味着不必要关心具体是哪种 Map (HashMap、TreeMap等)。

这么做的好处是 解耦。

少数复杂场景,转换为 Map 从而避免依赖具体的类,也是一种 解耦 的表现。让系统更少的依赖其它系统的代码,可以使系统更易于维护。

反序列化为List

当 JSON 格式是 {} 时,表示对象,可以反序列化为具体的对象或者 Map

当 JSON 格式是 [] 表示数组,Java 中一般不直接使用数组,而是更方便的 List

复制代码
1
2
List dataList = JSON.parseObject(content, List.class);

那么,List 集合中,包含的到底是什么呢?

反序列化的结果,取决于原始字符串的格式

  • 案例一
复制代码
1
2
["a1","a2","a3"]

表示集合中包含的是字符串(字符串也是对象)。反序列化的结果是:

复制代码
1
2
List<String> dataList = JSON.parseObject(content, List.class);
  • 案例二
复制代码
1
2
[{"a1":"1"},{"a2":"2"}]

表示集合中包含的是对象。反序列化的结果是:

复制代码
1
2
List<Map<String, String>> dataList = JSON.parseObject(content, List.class);
  • 案例三
复制代码
1
2
[["a1","a2","a3"]]

表示集合中包含的是子集合。反序列化的结果是:

复制代码
1
2
List<List<String>> dataList = JSON.parseObject(content, List.class);

总之,源数据格式越复杂,反序列化的结果,嵌套就越多也越复杂。在使用过程中一定要注意弄清楚源数据的格式。

最后

以上就是真实百合最近收集整理的关于JSON与FastJSON详解的全部内容,更多相关JSON与FastJSON详解内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部