Jackson以及fastjson的使用

tech2022-08-24  107

JSON(JavaScript Object Notation) 是 JavaScript 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。JSON 主要用于数据在前后端的传输,后端将JavaBean对象转化为Json字符串,前端将Json字符串转化为JS对象,尤其应用于AJAX异步请求。

前端JSON工具由JS自带

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>json</title> </head> <body> <script type="text/javascript"> //编写一个js的对象 let person = { name: "小红", age: 2, sex: "男" }; //将js对象转换成json字符串 let json_str = JSON.stringify(person); //将json字符串转换为js对象 let js_str = JSON.parse(json_str); </script> </body> </html>


后端也需要解析工具,Jackson和fastjson是主流工具。

Jackson

maven依赖

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.2</version> </dependency>

创建pojo

@Data @AllArgsConstructor @NoArgsConstructor public class User { private String name; private int age; private String sex; }

编写Controller返回给前端一个Json字符串

/* @RestController 方法不通过视图解析器,而是直接传递数据 通常用于前后端分离的数据传输 还有另一种方式时 @Controller和@Response的组合实现同样的效果 */ @RestController public class HelloJsonController { @RequestMapping("/json") public String json() throws JsonProcessingException { //创建Jackson对象映射器,解析数据 ObjectMapper mapper = new ObjectMapper(); //创建实体对象 List<User> users = new LinkedList<User>(); users.add(new User("小红", 20, "女")); users.add(new User("小马", 10, "男")); //利用对象映射器解析实体对象 String json_str = mapper.writeValueAsString(users); return json_str; } }

解决json字符串的乱码问题 @RequestMaping的produces属性来实现,修改下代码

//produces:指定响应体返回类型和编码 @RequestMapping(value = “/json”,produces =“application/json;charset=utf-8”)

在springmvc的配置文件上添加StringHttpMessageConverter消息转换配置!

<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>

fastjson

maven依赖

<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.73</version> </dependency>

fastjson中除了常规的Json字符串和JavaBean对象 还存在Json对象(JSONObject)和Json数组(JSONArray) 看源码可以知道,JSONObject是一个Map,JSONArray是一个list

@Test public void json() throws JsonProcessingException { //创建实体对象 List<User> users = new LinkedList<User>(); users.add(new User("小红", 20, "女")); users.add(new User("小马", 10, "男")); //Javabean转Json字符串 String str1 = JSON.toJSONString(users); String str2 = JSON.toJSONString(new User("小红", 20, "女")); //Json字符串转JavaBean List<User> list = JSON.parseArray(str1, User.class); User user = JSON.parseObject(str2, User.class); //JavaBean转Json对象 JSONObject jsonObject = (JSONObject) JSON.toJSON(user); JSONArray jsonArray = (JSONArray) JSON.toJSON(list); //Json对象转JavaBean user = JSON.toJavaObject(jsonObject, User.class); }
最新回复(0)