JSON简介
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率,是JavaScript对象的字符串表示法,它使用文本表示一个 JS 对象的信息。降维说人话就是一种便于理解、编译、传输用于描述实例的字符串。
Json要求和语法格式
- 对象表示为键值对,数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON 键值对是用来保存 JavaScript 对象的一种方式,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值:
例如:name为键、Hello world为数据值即从后端获取的对象/值1
2
3{"name":"Hello world"}
//下为JSON数组格式//
{"name":["luoyonghao","jiayueting","sunyuchen"]}
JSON解析工具
Jackson
Jackson框架是基于Java平台的一套数据处理工具
依赖:
官方依赖
pom.xml配置1
2
3
4
5
6<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>
将对象转化为JSON字符串1
2
3
4//创建一个jackson的对象映射器,用来解析数据
ObjectMapper mapper = new ObjectMapper();
//将对象解析成为json格式
String str = mapper.writeValueAsString(解析对象名);
前端js相关1
2
3
4
5
6
7//将js对象转换成json字符串
var str = JSON.stringify(js对象);
console.log(str);
//将json字符串转换为js对象
var js对象 = JSON.parse(str);
console.log(js对象.age,js对象.name,js对象.sex);
fastjson
fastJson是阿里巴巴出品的一个json序列化工具
依赖配置1
2
3
4
5<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
将对象转化为JSON字符串1
String objJson = JSON.toJSONString(Object object);
将Json串转换成java对象1
2
3
4
5//对象是单个元素
String objJson = JSON.parseObject(json对象,CLAZZ);
//对象包含多个元素
String objJson = JSON.parseArray(json对象,CLAZZ);
//CLAZZ为String.class为Map.class等等
JSON相关注解代码
@RestController
等价于@Controller + @ResponseBody
在类上直接使用 @RestController ,这样子,里面所有的方法都只会返回 json 字符串
@GetMapping
获取get请求1
2
3
4
5
6
7
8
9
10
11
12
13
14@RestController
public class UserController {
@GetMapping(value = "/json")
public String json() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
User user = new User("zhangsan", 17, "男");
//将对象解析成为json格式
String str = mapper.writeValueAsString(user);
//@ResponseBody,json格式返回
return str;
}
}
处理默认时间对象类型
Jackson默认Date date默认使用timestamps(时间戳:1970年01月01日00时00分00秒起至现在的总毫秒数)形式 。
自定义时间显示类型1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17@RequestMapping("/json")
public String json() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
//不使用时间戳的方式
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
//自定义日期格式对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//指定日期格式
mapper.setDateFormat(sdf);
Date date = new Date();
String str = mapper.writeValueAsString(date);
return str;
}
面向对象封装、以及方法重载便于以后使用1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class JsonUtils {
public static String getJson(Object object) throws JsonProcessingException {
return getJson(object,"yyyy-MM-dd HH:mm:ss");//默认时间显示形式
}
//第一个参数为时间对象,第二个参数为时间显示形式
public static String getJson(Object object, String dateFormat) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS,false);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
mapper.setDateFormat(simpleDateFormat);
return mapper.writeValueAsString(object);
}
}
后续使用1
2
3
4
5
6@RequestMapping("/json")
public String json5() throws JsonProcessingException {
Date date = new Date();
String json = JsonUtils.getJson(date);
return json;
}
...
...
This is copyright.