JSON
一、什么是JSON
1、JSON,是一种轻量级的数据交换格式
2、采用完全独立于编程语言的文本格式来存储和表示数据
3、简洁和清晰的层次结构使得Json成为理想的数据交换语言
4、易于人阅读和编写,同时也易于机器解析和生成,并且有效地提高网络传参效率
5、对象标识为键值对,数据由逗号分隔
6、花括号保存对象
7、方括号保存数组
二、JSON和JavaScript的对象互换
1、将json对象转换为JavaScript对象,使用JSON.parse()方法。
2、将JavaScript对象转换为json对象,使用JSON.stringify()方法
<script type="text/javascript"> //编写一个JavaScript对象 var user={ name:"年华", age:20, sex:"女" }; console.log(user);
//将js对象转换为json对象 var json=JSON.stringify(user); console.log(json);
//将json对象转换为javascript对象 var obj=JSON.parse(json); console.log(obj) </script>
三、Controller返回JSON数据(java层面)
1、导入json jar包
<dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.4</version> </dependency> </dependencies>
2、配置Springmvc需要的配置
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>Springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:com/zy/config/springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!--过滤器--> <filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/</url-pattern> </filter-mapping> </web-app>
配置 springmvc-servlet.xml 文件,和springmvc里面的配置文件内容一样
3、编写一个实体列,测试controller
/*导入lombokjar包*/ @Data @AllArgsConstructor @NoArgsConstructor public class User { private String name; private int age; private String sex; }
controller.java
//@Controller //它会走视图解析器
@RestController //它不会走视图解析器 public class UserController { //运行出现乱码,对乱码进行设置 使用produces //1、手动解决乱码 //2、在xml配置json乱码 @RequestMapping(value = "/json",produces = "application/json;charset=utf-8")
// @ResponseBody //它不会走视图解析器,会直接返回一个字符串,与controller配套使用的 public String json1() throws JsonProcessingException { //jackson中的objectmapper ObjectMapper mapper = new ObjectMapper(); //创建一个对象 User user = new User("年华",3,"女"); String s = mapper.writeValueAsString(user); return s; } }
在springmvc中的xml配置json乱码
<!--配置json乱码--> <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>
显示
创建一个数组/获取时间
@RequestMapping("/json1") public String json2() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); //创建一个数组 List<User> userList=new ArrayList<User>(); User user = new User("年华",3,"女"); User user1 = new User("年华1",5,"女"); User user2 = new User("年华2",8,"女"); User user3 = new User("年华3",4,"女"); User user4 = new User("年华4",10,"女"); userList.add(user); userList.add(user1); userList.add(user2); userList.add(user3); userList.add(user4); String s1 = mapper.writeValueAsString(userList); return s1; } @RequestMapping("/json4") public String json3() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); //使用 ObjectMapper来格式化输出,不使用时间戳 mapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, false); //自定义格式 SimpleDateFormat spd = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); mapper.setDateFormat(spd); //获取时间, Date date = new Date(); String s1 = mapper.writeValueAsString(date); //ObjectMapper ,时间解析后的默认格式为Timestamp 时间戳 /* String s = spd.format(date);*/ return s1 ; }
正在学习中,有错误的地方,请多多指教!