JSON
介绍
JavaScript Object Notation(JavaScript对象表示法)是目前最常用的对象序列化的方式。JSON可以在任何语言中使用,因为json官方指定了一套标准,各种语言都支持这套标准。
基本格式
语法规则
- 数据用键值对表示(键:值)键必须是字符串,值的类型见下
- 多条数据之间用逗号分隔
-
JSON值的类型
数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true或false)
- 数组(在中括号中)
- 对象(在大括号中)
例子
{
"name": "韦小宝",
"age": 26,
"height": 182.4,
"birthday": "1670-7-28",
"isRich": true,
"wifes": ["阿珂", "双儿", "建宁公主", "苏荃", "沐剑屏", "曾柔", "方怡"],
"firstMaster": {
"name": "陈近南",
"birthday": "1634-12-1"
}
}
FastJSON
在Java中操作JSON就使用FastJSON。FastJSON是一个标准的JSON库。添加依赖
避免带有alpha
beta
标记的版本,这是测试版本不稳定。<!-- 在下列地址查询最新的版本:https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
序列化对象
序列化就是将对象转换为JSON格式字符串的过程。 ```java import com.alibaba.fastjson.JSON;
//实现对象的序列化 public static void main(String[] args) { Building b = new Building(); b.setName(“创业大厦”); b.setAddress(“天宁兰陵兰陵路26号 “); //调用JSON.toJSONString(b),把Building对象转换为JSON格式的字符串返回 String content = JSON.toJSONString(b); System.out.println(content); }
<a name="2puPP"></a>
#### 反序列化对象
反序列化就是将JSON格式的字符串还原为对象的过程。
```java
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.class作为目标类
Map info = JSON.parseObject(content,Map.class);
String name2 = (String)info.get("name");
System.out.println(name2);
//当JSON格式是[],表示数组时,反序列化为List
List<String> dataList = JSON.parseObject(content, List.class);
}
解释一下反序列化为Map:
- Java的特点面向接口编程,这就意味着不用关心具体是哪种Map(HashMap,TreeMap等)
- 解耦
解释一下反序列化为List,list反序列化的结果取决于原始字符串的格式
如果集合中包含的是字符串(字符串也是对象)
//["a","b","c"]
List<String> data = JSON.parseObject(content,List.class);
如果集合中包含的是对象
//[{"a1":"1"},{"a2","2"}]
List<Map> data = JSON.parseObject(content,List.class);
如果集合中包含集合
//[["a","b","c"]]
List<List> data = JSON.parseObject(content,List.class);