本文介绍: JSON 与 FastJSON。

JSON 与 FastJSON

JSON

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

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

JSON 基本格式

必须是:对象

{
}

或 数组

[
]

JSON 语法规则

JSON 值的类型

可以数组对象,就意味着数据和对象可以任意嵌套、任意深度

范例:

{
    "name": "韦小宝",
    "age": 26,
    "height": 182.4,
    "birthday": "1670-7-28",
    "isRich": true,
    "wifes": ["阿珂", "双儿", "建宁公主", "苏荃", "沐剑屏", "曾柔", "方怡"],
    "firstMaster": {
      "name": "陈近南",
      "birthday": "1634-12-1"
    }
}

在 Java 程序如何操作使用 json 呢?最常见的是使用 FastJSON

FastJSON

FastJSON 是一个Java语言编写高性能功能完善、完全支持官方标准的 JSON 库。

使用 FastJson 来操作 json 以及完成对象序列化、反序列化的操作,会非常方便。

对象序列

下面我们来看一下使用 FastJSON 进行对象序列化的例子

如果是本地的 IDE 环境,在编码之前,需要引入依赖

<!-- 在下列地址查询最新版本https://mvnrepository.com/artifact/com.alibaba/fastjson --&gt;
<dependency&gt;
    <groupId&gt;com.alibaba</groupId&gt;
    <artifactId&gt;fastjson</artifactId&gt;
    <version>1.2.62</version>
</dependency>

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

使用 FastJSON 序列化对象

首先必须 import

import com.alibaba.fastjson.JSON;

然后可以实现

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 库。

反序列化代码

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 对象。

反序列化为 List

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

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

List dataList = JSON.parseObject(content, List.class);

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

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

案例一:

["a1","a2","a3"]

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

List<String> dataList = JSON.parseObject(content, List.class);

案例二:

[{"a1":"1"},{"a2":"2"}]

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

List<Map<String, String>> dataList = JSON.parseObject(content, List.class);

案例三:

[["a1","a2","a3"]]

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

List<List<String>> dataList = JSON.parseObject(content, List.class);

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

原文地址:https://blog.csdn.net/BlueSea_W/article/details/134709684

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_12489.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注