1.JSON:
1.1基本概念:
JSON(JavaScript Object Nation:JS对象标记)是一种数据交换格式,JS中的数据类型都可以采用JSON表示。
JS中的数据类型:
对象采用 属性名:属性值 形式的键值对;
数据之间采用逗号隔开;
数组采用方括号表示;
对象采用花括号表示;JSON表示JS对象本质上就是将对象用文本的形式表示,本质就是字符串;
代码实例1:(JSON将JS对象的转换与表示)
JSON.stringify(user); //将user对象转换成字符串的形式
JSON.parse(JSON.stringify(user)); //将转换后的字符串再转换成对象的形式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!--json与javascript之间的对象转换问题--> <script> var user={ name:"xbf", age:18, id:1 }; console.log(user); //使用json将其转换成字符串的形式 var str=JSON.stringify(user); console.log(str); //使用JSON将字符串转换回来 var u2=JSON.parse(str); console.log(u2); </script> </body> </html>
运行结果:
1.2Controller层进行JSON字符串的返回:
Jackson:解析Json的工具,使用时需要下载相应的Jar包:
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.8</version> </dependency>
代码实例2:(使用Jackson实现Controller层返回字符串数据层类型)
此处只列举下Controller层的代码:
(使用到了两个新东西,@ResponseBody(将服务端响应的对象转换成json格式响应回去),ObjectMapper对象:对象映射器 直接将对象转换成字符串)
@Controller public class UserController { @RequestMapping("/t1") @ResponseBody public String test1() throws JsonProcessingException { //创建一个Jackson的解析对象mapper ObjectMapper mapper = new ObjectMapper(); //创建一个对象,并解析成字符串的形式 mapper.writeValueAsString String s = mapper.writeValueAsString(new User("张三", 18, 1)); //返回字符串 return s; } }
出现乱码问题:
解决方法:
//produces:指定响应体返回类型和编码 @RequestMapping(value = "/json",produces = "application/json;charset=utf-8")
上述的解决方法比较繁琐,需要在每个@RequestMapping中添加处理语句,使用Spring的配置统一进行处理,就不用在每个项目中一个个解决了(在注解驱动中进行配置)。
<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>
代码实例3:(使用Jackson返回集合)
//打印集合测试 @RequestMapping("/t2") @ResponseBody //将服务端响应的对象转换成json格式字符串响应回去 public String test2() throws JsonProcessingException { //json解析对象 ObjectMapper mapper = new ObjectMapper(); User user1 = new User("张三1", 18, 1); User user2 = new User("张三2", 18, 2); User user3 = new User("张三3", 18, 3); User user4 = new User("张三4", 18, 4); ArrayList<User> list = new ArrayList<>(); list.add(user1); list.add(user2); list.add(user3); list.add(user4); String s = mapper.writeValueAsString(list); return s; }
此案例就是使用spring中配置来解决JSON的乱码问题。
代码实例4:JSON之时间日期对象:
//打印时间的测试1: @RequestMapping("/time1") @ResponseBody //将服务端响应的对象转换成json形式 public String time1() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); Date date = new Date(); String s = mapper.writeValueAsString(date); return s; } //打印时间的测试2: @RequestMapping("/time2") @ResponseBody //将服务端响应的对象转换成json形式 public String time2() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); //1.如何让他不返回时间戳!所以我们要关闭它的时间戳功能 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false); //2.时间格式化问题!自定日期格式对象; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //3.让mapper指定时间日期格式为simpleDateFormat; mapper.setDateFormat(sdf); //写一个日期对象 Date date = new Date(); return mapper.writeValueAsString(date); }