Json
一、什么是Json
- JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛。
- 采用完全独立于编程语言的文本格式来存储和表示数据。
- 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
- 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在 JavaScript 语言中,一切都是对象。因此,任何JavaScript 支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:
- 对象表示为键值对,数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON 键值对是用来保存 JavaScript 对象的一种方式,和 JavaScript 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值:
json数据实例:
{"name": "QinJiang"}
{"age": "3"}
{"sex": "男"}
Json和JS的对象长的很像,容易让人混淆,实际上可以把Json理解成是 JS对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
对比:
//这是一个对象,注意键名也是可以使用引号包裹的
var obj = {a: 'Hello', b: 'World'};
//这是一个 JSON 字符串,本质是一个字符串
var json = "{"a": "Hello", "b": "World"}";
在前端中JS也封装了方法可以使json和js对象可以相互转换,有兴趣可以自己搜索,以下主要讲Java对Json的操作。
二、Java如何转换对象和Json
1、JackSon
1.1、使用准备
SSM项目:
需要手动引入依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
SpringBoot项目:
SpringBoot自带JackSon,无需手动引入依赖
1.2、简单使用
pojo实体类:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
public Integer id;
public Integer age;
public String name;
}
controller:
@RequestMapping(path = "/json")
public String json() throws JsonProcessingException {
//创建一个jackson的对象映射器,用来解析数据
ObjectMapper mapper = new ObjectMapper();
//创建一个对象
User user = new User(1, 3, "夏帆");
//将我们的对象解析成为json格式
String json = mapper.writeValueAsString(user);
return json;
}
运行结果:
1.3、处理日期类型
进入ObjectMapper对象映射类发现,它对于日期处理是返回一串序列:
public DateFormat getDateFormat() {
return this._serializationConfig.getDateFormat();
}
同时,它还提供一个set方法用于修改日期格式:
public ObjectMapper setDateFormat(DateFormat dateFormat) {
this._deserializationConfig = (DeserializationConfig)this._deserializationConfig.with(dateFormat);
this._serializationConfig = this._serializationConfig.with(dateFormat);
return this;
}
所以对于带有日期的操作,我们可以自定义:
DateFormat是抽象类,我们一般使用它的子类SimpleDateFormat 来操作,该子类的字符串操作规则如下:
示例如下:
pojo实体类:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
public Integer id;
public Integer age;
public String name;
public Date date;
}
controller:
@RequestMapping(path = "/json")
public String json() throws JsonProcessingException {
//创建一个jackson的对象映射器,用来解析数据
ObjectMapper mapper = new ObjectMapper();
//创建一个对象
User user = new User(1, 3, "夏帆",new Date());
//给ObjectMapper对象定制日期格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年mm月dd日");
mapper.setDateFormat(simpleDateFormat);
//将我们的对象解析成为json格式
String json = mapper.writeValueAsString(user);
return json;
}
运行结果:
2、FastJson
fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。实现json的转换方法很多,最后的实现结果都是一样的。最大的优点是性能高。
2.1、使用准备
无论是SSM还是SpringBoot都需要引入依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
2.2、三个主要的操作类
JSONObject 代表 json 对象
- JSONObject实现了Map接口, 猜想 JSONObject底层操作是由Map实现的。
- JSONObject对应json对象,通过各种形式的get()方法可以获取json对象中的数据,也可利用诸如size(),isEmpty()等方法获取"键:值"对的个数和判断是否为空。其本质是通过实现Map接口并调用接口中的方法完成的。
JSONArray 代表 json 对象数组
- 内部是有List接口中的方法来完成操作的。
JSON代表 JSONObject和JSONArray的转化
- JSON类源码分析与使用
- 仔细观察这些方法,主要是实现json对象,json对象数组,javabean对象,json字符串之间的相互转化。
2.3、简单使用
pojo实体类:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
public Integer id;
public Integer age;
public String name;
}
controller:
@RequestMapping(path = "/fjson")
public String testFjson() throws JsonProcessingException, JSONException {
User user1 = new User(1, 1, "夏帆1");
User user2 = new User(2, 2, "夏帆2");
User user3 = new User(3, 3, "夏帆3");
List<User> list = new ArrayList<User>();
list.add(user1);
list.add(user2);
list.add(user3);
String l1 = JSON.toJSONString(list);
String u1 = JSON.toJSONString(user1);
String u2 = JSON.toJSONString(user2);
String u3 = JSON.toJSONString(user3);
return l1;
}
运行结果: