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库。添加依赖
避免带有alphabeta标记的版本,这是测试版本不稳定。<!-- 在下列地址查询最新的版本: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格式的字符串还原为对象的过程。```javapublic 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格式是[],表示数组时,反序列化为ListList<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);
