1️⃣概念
JSON就是一种数据格式。
- 如果是{}开头,那么表示的是一个对象
- 如果是[]开头,表示的是一个数组或者集合
例如:
var pro ={
"name":"中国",
"province":[{"name":"黑龙江",”cities”:["哈尔滨","大庆"]},
{"name":"广东","cities":["广州","深圳","珠海"]},
{"name":"台湾","cities":["台北","高雄"]}]}
这种格式一般称为json字符串
var country = {name:"中国",
province:[{name:"黑龙江", cities:["哈尔滨","大庆"]},
{name:"湖北省", citise:["武汉","荆州"]},
{name:"台湾省", cities:["台北", "高雄"]}]}
这种格式一般称之为json对象。
区别:有无引号。java端服务端产生的数据如果要和前端进行通讯,那么采用的就是json字符串来进行通讯。
2️⃣作用
用于前后端通讯,java语言提供对应页面所需要的数据。数据以json字符串的形式来返回。
3️⃣转换
如果前端传输给java服务器一个json字符串形式的数据,java语言其实是可以解析该数据的,进而形成java里面的对象。
同样地,如果一个java对象里面存数地数据,也可以将其转成json字符串
有三个工具类可以方便地实现java对象和json字符串的相互转换。
- Gson google
- fastjson alibaba
- Jackson
因为SpringMVC框架内置Jackson,所以我们在此使用Jackson。
Jackson用法:
①导包
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.1</version>
</dependency>
②使用
将单个java对象转化为json字符串:
@Test
public void Test01() throws JsonProcessingException {
User user = new User();
user.setUsername("admin");
user.setPassword("123456");
ObjectMapper mapper = new ObjectMapper();
//传入java对象
String s = mapper.writeValueAsString(user);
System.out.println(s);
}
将java对象集合转化为json字符串:
@Test
public void Test02() throws JsonProcessingException {
User user = new User();
user.setUsername("admin");
user.setPassword("123456");
User user2 = new User();
user2.setUsername("admin2");
user2.setPassword("456789");
List<User> users = new ArrayList<User>();
users.add(user);
users.add(user2);
ObjectMapper mapper = new ObjectMapper();
//传入含有java对象的List
String s = mapper.writeValueAsString(users);
System.out.println(s);
}
将json字符串转化成单个java对象:
@Test
public void Test03() throws JsonProcessingException {
String userStr = "{\"username\":\"admin\",\"password\":\"123456\"}";
ObjectMapper mapper = new ObjectMapper();
//传入json字符串,以及我们想要转成的类型
User user = mapper.readValue(userStr,User.class);
System.out.println(user);
}
将json字符串转化成含有多个java对象的集合:
@Test
public void Test04() throws JsonProcessingException {
String userStr = "[{\"username\":\"admin\",\"password\":\"123456\"}," +
"{\"username\":\"admin\",\"password\":\"456789\"}]";
ObjectMapper mapper = new ObjectMapper();
//先获取类型工厂
TypeFactory typeFactory = mapper.getTypeFactory();
//向工厂中传入集合的类型,以及集合中元素的类型,得到一个类型集合
CollectionType collectionType = typeFactory.constructCollectionType(List.class, User.class);
//传入json字符串,以及类型集合
List<User> users = mapper.readValue(userStr, collectionType);
//遍历输出
for (User user : users) {
System.out.println(user);
}
}