JSON基础

JSON基础配置

Posted by John Doe on 2019-08-19
Words 936 and Reading Time 4 Minutes
Viewed Times

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
17
public 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.

...

...

00:00
00:00