5、SpringMVC:JSON
什么是JSON:
- JSON(JavaScript Object Notation, JS对象标记)是一种轻量级的数据交换格式,目前使用特别广
- 采用完全独立于编程语言的文本格式来存储和表示数据。
- 简洁和清晰的层次结构使得JSON成为理想的数据交换语言。
- 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON键值对是用来保存JavaScript对象的一种方式,和JavaScript对象的写法也大同小异,
键/值对组合中的键名写在前面并用双引号""包裹,使用冒号:分隔,然后紧接着值:
{"anme":"张志喜"} {"age":"21"} {"sex":"男"}
JSON是JavaScript对象的字符串表示法,它使用文本表示一个JS对象的信息,本质是一个字
符串。
1 2 3 4 | // 这是一个对象,注意:键名也可以使用引号括起来 var obj = {a : "张三" , b: "李四" } // 这是一个json字符串,本质上是一个字符串 var json = '{"a":"张三", b :"李四"}' |
JavaScript中JSON对象跟JSON字符串的互相转换:
<script type="text/javascript"> var user = { "name": "张志喜", "age": "21", "sex": "男" }; // 对象转JSON字符串 let jsonStr = JSON.stringify(user); // {"name":"张志喜","age":"21","sex":"男"} console.log(jsonStr); // JSON字符串转对象 let jsonObj = JSON.parse(jsonStr); console.log(jsonObj); </script>
jackson-databind的使用:
1、导入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.1</version> </dependency>
2、在springmvc.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>
3、创建对象映射器,将对象转为JSON格式字符串
@RestController public class JsonDemo { @RequestMapping(value = "/json") @ResponseBody // 表示不会走视图解析器,会直接返回一个字符串到页面 public String json1(ServletResponse response) throws IOException { // 创建对象映射器 ObjectMapper mapper = new ObjectMapper(); List<User> list = new ArrayList<User>(); // 创建一个对象 User user1 = new User("张志喜1", 21, "男"); User user2 = new User("张志喜2", 21, "男"); User user3 = new User("张志喜3", 21, "男"); User user4 = new User("张志喜4", 21, "男"); list.add(user1); list.add(user2); list.add(user3); list.add(user4); // 返回[将对象转为JSON格式字符串] return mapper.writeValueAsString(list); } }
4、测试结果
END:解决输出到网页的中文乱码问题:
1、在方法的请求映射上面设置编码格式(这种方式如果方法很多的情况下就不便于管理)
1 | @RequestMapping(value = "/j1" , produces = "application/json;charset=utf-8" ) |
2、在springmvc的配置文件进行配置:【注意在导入新的jar包要更新项目的lib目录,否则会报500错误】
<!--解决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>
阿里巴巴的firstjson使用:
1、导入maven依赖:
<!--阿里巴巴的JSON格式转换--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.75</version> </dependency>
2、配置乱码问题
3、JSON对象、JSON字符串、java对象的互转:
@Test public void test1(){ User user = new User("张志喜", 21, "男"); // java对象转为JSON格式字符串 String str = JSON.toJSONString(user); System.out.println("java对象-->JSON字符串" + str); // java对象转为JSON对象 JSON toJSON = (JSON) JSON.toJSON(user); System.out.println("java对象-->JSON对象" + toJSON.toString()); // JSON字符串转java对象 User user1 = JSON.parseObject(str, User.class); System.out.println("JSON字符串-->Java对象" + user1.toString()); // JSON对象转Java对象 User user2 = JSON.toJavaObject(toJSON, User.class); System.out.println("JSON对象-->Java对象"+user2.toString()); }
输出结果:
java对象-->JSON字符串{"age":21,"name":"张志喜","sex":"男"}
java对象-->JSON对象{"sex":"男","name":"张志喜","age":21}
JSON字符串-->Java对象User(name=张志喜, age=21, sex=男)
JSON对象-->Java对象User(name=张志喜, age=21, sex=男)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话