JSON

本文介绍了JSON的基本格式和语法规则,强调其作为跨语言文本数据交换格式的特性。重点讲解了在Java中使用FastJSON进行对象序列化和反序列化的操作,包括如何引入依赖、序列化为JSON字符串以及反序列化为具体对象或Map对象,展示了FastJSON在简化JSON操作中的便利性。
摘要由CSDN通过智能技术生成

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

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

JSON 基本格式:
必须是:对象

{
}
或 数组

[
]
JSON 语法规则:
数据用 名称:值 (也叫键值对)表示

名称(键)必须是字符串

键、值之间用冒号 “:” 分隔。

多条数据之间,用逗号 “,” 分隔

注意符号都是半角,不要因为输入法的原因输入全角了

JSON 值的类型:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在中括号中)
对象(在大括号中)
null

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

范例:

{
    "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 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <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 对象。

第二个参数执行 Map 为目标类即可。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值