对于JSON的浅薄理解

对于JSON的浅薄理解

后端如果使用java写,后端数据的类型是基本数据类型加上自己创建的应用类型

前端使用的数据类型,并不存在数据类型 没有特定的规定。

前端和后端的数据怎么正确传输?

JSON的作用

json:

  • 是一种轻量级的数据交换格式
  • 采用完全独立于编程语言的文本格式
  • JSON内有键值对的向欧盟和瑟吉欧

JSON不是编程语言,是传递数据的格式,,对于JSON的使用,需要JSON的解析工具。

常用的JSON解析工具有两个:JackSon和FastJson

jackSon的使用

这里我们依旧采用应用的方式来讲解:

JSON的方法经常用的就是把java转化成String然后传递给前端。

使用JackSon需要导入依赖

1
2
3
4
5
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.1</version>
</dependency>

创建一个SpringMVC程序,过程如这篇博客: HelloSpringMVC | dwx-tx的小天地

1
@ResponseBody

这就能保证return 不再是重定向,而是将值返回到前端。

这就不难解释,我在写自己的项目的时候,能够将文件直接返回到前端。

1
2
3
4
5
6
@ResponseBody
public String JackSon(Model model){

User user = new User("dwx", 1900, 19);
return user.toString();
}

json的基本原理就是将对象转化成一个字符串然后返回到去前端

1
2
3
4
5
6
7
8
9
10
11
12
@RequestMapping("/h1")
@ResponseBody
public String JackSon(Model model) throws JsonProcessingException {

User user = new User("dwx", 1900, 19);

//使用JSON
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(user);

return s;
}

使用JSON,JSON不仅仅可以作用于一个对象,也能作用于LIST

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@RequestMapping("/h1")
@ResponseBody
public String JackSon(Model model) throws JsonProcessingException {

User user = new User("dwx", 1900, 19);
User user1 = new User("dwx1", 1900, 19);
User user2 = new User("dwx2", 1900, 19);

List<User> UserList = new ArrayList<>();


UserList.add(user);
UserList.add(user1);
UserList.add(user2);
//使用JSON
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(UserList);

return s;
}

JSON中文乱码问题

对于JSON的乱码,使用过滤器无法解决这个问题,但是JSON给出了解决方法

使用注解解决

@RequestMappering中有一个produces属性,我们可以通过这个属性来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Controller
public class MyController {

@RequestMapping(value = "/h1",produces = "application/json;charset-utf-8")
@ResponseBody
public String JackSon(Model model) throws JsonProcessingException {

User user = new User("党文轩", 1900, 19);
User user1 = new User("德行1", 1900, 19);
User user2 = new User("等我下", 1900, 19);

List<User> UserList = new ArrayList<>();


UserList.add(user);
UserList.add(user1);
UserList.add(user2);
//使用JSON
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(UserList);

return s;
}

}

这里的问题在于,这个注释可能会重写很多遍,因此SpringMVC提供了在Springxml文件中配置的方法解决这个问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>

固定格式,不需要做任何的更改

FastJson

FASTJSON是阿里自己的JSON编译器,但是由于他的功能和我们使用的JackSon差不多,这里我们就不讲了

可以参考这个博客: fastjson的基本使用方法

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2023 dwx
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信