JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式,目前使用特别普遍。javascript
采用彻底独立于编程语言的文本格式来存储和表示数据。html
简洁和清晰的层级结构使得JSON成为理想的数据交换格式。java
易于人阅读和编写,同时也易于机器解析和生成,并有效地提高网络传输效率。web
在JavaScript语言中,一切都是对象。所以,任何JavaScript支持的类型均可以经过JSON来表示,例如字符串、数字、对象、数组等。spring
JSON的要求和语法格式:编程
JSON字符串---->JavaScript对象json
使用JSON.parse()方法数组
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果为 {a: "Hello", b: "World"}
JavaScript对象---->JSON字符串网络
使用JSON.stringify()方法mvc
car json = JSON.stringify({a: "Hello", b: "World"}); //结果为 '{"a": "Hello", "b": "World"}'
在web页面下新建一个json-1.html页面
var user = { name: "张三", age: 5, sex: "男" }; var json = JSON.stringify(user); console.log(json) var obj = JSON.parse(json); console.log(obj)
使用IDEA打开,查看控制台输出!
Jackson是比较好的json解析工具
咱们这里使用Jackson,须要导入它的jar包
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.10.0</version> </dependency>
package com.star.controller; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.star.pojo.User; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController //使用这个注解不经过视图解析器,直接返回方法对应的类型 public class UserController { @RequestMapping("/j1") //这里返回一个字符串 public String json() throws JsonProcessingException { //建立一个User对象 User user = new User("张三", 10, "男"); //建立一个jackson的对象映射器,用来解析数据 ObjectMapper mapper = new ObjectMapper(); //将咱们的对象解析为json格式 String string = mapper.writeValueAsString(user); return string; } }
启动测试!
发现有乱码问题,咱们可使用两种方法解决:
修改@RequestMapping注解
@RequestMapping(value = "/j1",produces = "application/json;charset=utf-8")
这种方式比较麻烦,若是项目中有许多的请求则每个一个都要添加,能够经过配置文件统一只当。
<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>
@RequestMapping("/j2") public String json2() throws JsonProcessingException { User user1 = new User("张三1号", 10, "男"); User user2 = new User("张三2号", 10, "男"); User user3 = new User("张三3号", 10, "男"); User user4 = new User("张三4号", 10, "男"); ArrayList<User> users = new ArrayList<User>(); users.add(user1); users.add(user2); users.add(user3); users.add(user4); ObjectMapper mapper = new ObjectMapper(); String string = mapper.writeValueAsString(users); return string; }
启动测试:
@RequestMapping("/j3") public String json3() throws JsonProcessingException { Date date = new Date(); ObjectMapper mapper = new ObjectMapper(); String string = mapper.writeValueAsString(date); return string; }
启动测试:
这里默认日期格式会变成一个数字即从1970.1.1到如今的毫秒数!
咱们能够将日期转换为咱们想要的格式,有两种方法!
@RequestMapping("/j3") public String json3() throws JsonProcessingException { Date date = new Date(); //使用SimpleDateFormat类设置格式,调用format方法将时间转为该格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format = sdf.format(date); ObjectMapper mapper = new ObjectMapper(); String string = mapper.writeValueAsString(format); return string; }
启动测试:
显示成功!
Jackson 默认是会把时间转成timestamps形式,咱们能够在代码中取消默认的格式
@RequestMapping("/j3") public String json3() throws JsonProcessingException { Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ObjectMapper mapper = new ObjectMapper(); //取消默认的时间格式 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); //定义时间格式为自定义的 mapper.setDateFormat(sdf); //将时间对象转为JSON字符串 String string = mapper.writeValueAsString(date); return string; }
启动测试:
显示成功!
这两种方法均可以,能够本身选择!
若是要常常使用的话,这样是比较麻烦的,咱们能够将这些代码封装到一个工具类中
package com.star.utils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import java.text.SimpleDateFormat; import java.util.Date; public class JsonUtils { public static String getJson(Object object){ return getJson(object,"yyyy-MM-dd HH:mm:ss");//默认格式 } public static String getJson(Object object, String dateFormat){ ObjectMapper mapper = new ObjectMapper(); //取消默认的时间格式 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); //自定义日期格式 SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); mapper.setDateFormat(sdf); try { return mapper.writeValueAsString(object); } catch (JsonProcessingException e) { e.printStackTrace(); } return null; } }
如今咱们使用工具类,代码就更简洁了!
@RequestMapping("/j4") public String json4() throws JsonProcessingException { Date date = new Date(); return JsonUtils.getJson(date); }
咱们也能够修改集合的方法
@RequestMapping("/j2") public String json2() throws JsonProcessingException { User user1 = new User("张三1号", 10, "男"); User user2 = new User("张三2号", 10, "男"); User user3 = new User("张三3号", 10, "男"); User user4 = new User("张三4号", 10, "男"); ArrayList<User> users = new ArrayList<User>(); users.add(user1); users.add(user2); users.add(user3); users.add(user4); return JsonUtils.getJson(users) }
fastjson.jar是阿里开发的一款专门用于Java开发的包,能够方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。实现json的转换方法不少,最后的实现结果都是同样的。
导入依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency>
FastJson三个主要的类:
JSONObject表明json独对象
JSONArray 表明json对象数组
JSON表明JSONObject和JSONArray的转换
@RequestMapping("/fj1") public String json(){ User user1 = new User("张三1号", 10, "男"); User user2 = new User("张三2号", 10, "男"); User user3 = new User("张三3号", 10, "男"); User user4 = new User("张三4号", 10, "男"); ArrayList<User> users = new ArrayList<User>(); users.add(user1); users.add(user2); users.add(user3); users.add(user4); String string = JSON.toJSONString(users); return string; }
启动测试:
经常使用的转换:
Java对象 ===> JSON字符串
JSON.toJSONString(object)
JSON字符串 ===> Java对象
JSON.paresObject(json, object.class)
Java对象 ===> JSON对象
(JSONObject) JSON.toJSON(object)
JSON对象 ===> Java对象
JSON.toJavaObject(jsonObject, object.class)
这种工具类,咱们只须要掌握使用就行了,在使用的时候在根据具体的业务去找对应的实现。拿来用就行了!