文章目录
-
- 一、什么JSON
- 二、在前端js对象与JSON的相互转换
- 三、SpringMVC中解决JSON字符串乱码问题(固定代码)
- 四、通过Jackson将java对象转换成json字符串
-
-
- 1. 将普通对象转化JSON
- 2. 将时间类(Date)转换成JSON
- 3. 封装成工具类
-
- 五、通过FastJson将java对象转换成json字符串
-
-
- 常用方法
- 1. 将普通java对象转换成JSON
- 2. 将时间类(Date)转换成JSON
-
一、什么JSON
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON的表达形式:
- JSON值是由键值对组成的,其中键中的字面值中的英文必须使用小写。
- 键和值之间通过英文的“:”分隔,键值对之间使用英文的“,”分隔。
- 值可以使用对象、数组、数字、字符串。
如:{“name”: “John Doe”, “age”: 18, “address”: {“country” : “china”, “zip-code”: “10000”}}
二、在前端js对象与JSON的相互转换
要实现从JSON字符串转换为JS对象,使用 JSON.parse() 方法:
要实现从JS对象转换为JSON字符串,使用 JSON.stringify() 方法:
注意:JSON是javascript中内置的对象
三、SpringMVC中解决JSON字符串乱码问题(固定代码)
下图就是json字符串乱码
在SpringMVC中给我们提供了一步式解决所有JSON乱码的方案,如下:
springmvc-servlet.xml:
<!--解决json 乱码配置-->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<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>
这样,我们就成功的解决了JSON的乱码问题
四、通过Jackson将java对象转换成json字符串
jackson的maven依赖
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
1. 将普通对象转化JSON
介绍一个注解
@ResponseBody:这个注解的作用是是这个请求不走视图解析器,直接返回给前端String
介绍一个类
ObjectMapper:其中有一个writeValueAsString(Object o)方法,其作用就是将对象转换成JSON。
代码:
@RequestMapping("/json/t1")
@ResponseBody //这个注解的作用是是这个请求不走视图解析器,直接返回给前端String
public String test01(){
ObjectMapper jaskson = new ObjectMapper();
ArrayList<User> list = new ArrayList();
User user01 = new User("寒江coder01", 18);
User user02 = new User("寒江coder02", 18);
User user03 = new User("寒江coder03", 18);
list.add(user01);
list.add(user02);
list.add(user03);
try {
return jaskson.writeValueAsString(list);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
请求结果的返回值就是JSON字符串
2. 将时间类(Date)转换成JSON
第一步:将设置"打印时间为时间戳"的默认置为false
第二步:设置打印日期的格式
第三步:传递Date对象
代码:
@RequestMapping("/json/t2")
@ResponseBody
public String test02(){
ObjectMapper jaskson = new ObjectMapper();
//将设置"打印时间为时间戳"的默认置为false
jaskson.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//设置打印日期的格式
jaskson.setDateFormat(sdf);
Date date = new Date();
try {
//传递Date对象
return jaskson.writeValueAsString(date);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
3. 封装成工具类
源码:
public class JackUtil {
public static String toJsonStr(Object o){
return toJsonStr(o,"yyyy-MM-dd HH:mm:ss");
}
public static String toJsonStr(Object o,String dateForm){
ObjectMapper jaskson = new ObjectMapper();
//将设置"打印时间为时间戳"的默认置为false
jaskson.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
//设置打印日期的格式
jaskson.setDateFormat(new SimpleDateFormat(dateForm));
try {
return jaskson.writeValueAsString(o);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
}
测试:
@RequestMapping("/json/t3")
@ResponseBody
public String test03(){
return JackUtil.toJsonStr(new User("寒江coder01", 15));
}
@RequestMapping("/json/t4")
@ResponseBody
public String test04(){
return JackUtil.toJsonStr(new Date(),"yyyy-MM-dd HH:mm");
}
五、通过FastJson将java对象转换成json字符串
FastJson的maven依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
FastJson的使用非常简单,我们需要会使用JSON类。它是阿里巴巴的作品。
常用方法
toJSONString(Object o):将普通java对象转换成JSON字符串。
toJSONStringWithDateFormat(Date date, “yyyy-MM-dd HH:mm:ss”):将java的Date对象格式化成转换成JSON字符串。
parseObject(String json, Xxx.class):将JSON字符串转化成java对象
toJavaObject(String json, Xxx.class):将JSON字符串转化成java对象
1. 将普通java对象转换成JSON
代码:
@RequestMapping("/json/j1")
@ResponseBody
public String test01(){
ArrayList<User> list = new ArrayList() ;
list.add(new User("寒江Coder",22));
list.add(new User("寒江Coder",22));
list.add(new User("寒江Coder",22));
return JSON.toJSONString(list);
}
2. 将时间类(Date)转换成JSON
代码:
@RequestMapping("/json/j2")
@ResponseBody
public String test02(){
return JSON.toJSONStringWithDateFormat(new Date(),"yyyy-MM-dd HH");
}