当前位置: 首页 > news >正文

SpringMVC 学习(七)JSON

9. JSON

9.1 简介

JSON(JavaScript Object Notation,JS 对象标记)是一种轻量级数据交换格式,采用独立于编程语言的文本格式储存和表示数据,易于机器解析和生成,提升网络传输效率。

任何 JavaScript 支持的数据类型都可以通过 JSON 表示,例如字符串、数字、对象、数组等。

JSON 键值对保存 JavaScript 对象,键:值 对组合中的键名在前用双引号 "" 包裹,值在后,两者使用冒号 : 分隔。

{"name": "弗罗多"}
{"age": "50"}
{"sex": "男"}
  • JSON 是 JavaScript 对象的字符串表示法,使用文本表示一个 JS 对象,本质是一个字符串。

    var obj = {a: 'Hello', "b": 'World'}; // JS 对象
    var json = '{"a": "Hello", "b": "World"}'; // JSON 字符串
    
  • 使用 JSON.stringify() 方法可将 JavaScript 对象转换为JSON字符串。

    var json = JSON.stringify({a: 'Hello', b: 'World'});
    // json = '{"a": "Hello", "b": "World"}'
    
  • 使用 JSON.parse() 方法可将 JSON 字符串转换为 JS 对象。

    var obj = JSON.parse('{"a": "Hello", "b": "World"}'); 
    // obj = {a: 'Hello', b: 'World'}
    

9.2 Controller 返回 JSON

(1) jackson

<!--jackson-->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.10.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.10.0</version>
</dependency>

注意:新导入依赖时发布的lib目录下引入依赖

(2) 中文乱码

  • @RequestMapping 注解 produces 属性解决中文乱码
@Controller
public class UserController {// produces 设置编码格式,解决中文乱码@RequestMapping(value = "/testResJson", produces = "application/json;charset=utf-8")// 不被视图解析器解析,返回JSON字符串@ResponseBodypublic String testResJson() throws JsonProcessingException {User user = new User("弗罗多", 50, "男");ObjectMapper mapper = new ObjectMapper();// 将对象转换为 JSONreturn mapper.writeValueAsString(user);}
}
  • Spring MVC 配置解决中文乱码问题
<!--spring-servlet.xml-->
<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>
  • 测试
@Controller
public class UserController {// produces 设置编码格式,解决乱码@RequestMapping(value = "/testResJson")// 不被视图解析器解析,返回字符串@ResponseBodypublic String testResJson() throws JsonProcessingException {User user = new User("弗罗多", 50, "男");ObjectMapper mapper = new ObjectMapper();return mapper.writeValueAsString(user);}@RequestMapping(value = "/testResMoreJson")@ResponseBodypublic String testResMoreJson() throws JsonProcessingException {List<User> userList = new ArrayList<User>();User frodo = new User("弗罗多", 50, "男");User sam = new User("山姆", 50, "男");User aragon = new User("阿拉贡", 50, "男");userList.add(frodo);userList.add(sam);userList.add(aragon);ObjectMapper mapper = new ObjectMapper();return mapper.writeValueAsString(userList);}@RequestMapping("/testResTimeJson")@ResponseBodypublic String testResTimeJson() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();//不使用时间戳的方式mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);//自定义日期格式对象SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:dd:ss");//指定日期格式mapper.setDateFormat(simpleDate);Date date = new Date();// java 时间格式控制// String formatDate = simpleDate.format(date);return  mapper.writeValueAsString(date);}
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 抽取为工具类
public class JsonUtil {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;}}

(3) FastJson

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.70</version>
</dependency>
@RequestMapping(value = "/testFastJson")
@ResponseBody
public String testFastJson() throws JsonProcessingException {List<User> userList = new ArrayList<User>();User frodo = new User("弗罗多", 50, "男");User sam = new User("山姆", 50, "男");User aragon = new User("阿拉贡", 50, "男");userList.add(frodo);userList.add(sam);userList.add(aragon);System.out.println("*******Java对象 转 JSON字符串*******");String str1 = JSON.toJSONString(userList);System.out.println("JSON.toJSONString(list)==>"+str1);String str2 = JSON.toJSONString(frodo);System.out.println("JSON.toJSONString(frodo)==>"+str2);System.out.println("\n****** JSON字符串 转 Java对象*******");User jp_user1=JSON.parseObject(str2,User.class);System.out.println("JSON.parseObject(str2,User.class)==>"+jp_user1);System.out.println("\n****** Java对象 转 JSON对象 ******");JSONObject jsonObject1 = (JSONObject) JSON.toJSON(sam);System.out.println("(JSONObject) JSON.toJSON(sam)==>"+jsonObject1.getString("name"));System.out.println("\n****** JSON对象 转 Java对象 ******");User to_java_user = JSON.toJavaObject(jsonObject1, User.class);System.out.println("JSON.toJavaObject(jsonObject1, User.class)==>"+to_java_user);return JSON.toJSONString(userList);
}

在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/176891.html

相关文章:

  • 重学C++ | std::set 的原理
  • AnV-X6使用及总结
  • Go 围炉札记
  • 数据分析回头看2——重复值检查/元素替换/异常值筛选
  • 什么是OSPF?为什么需要OSPF
  • 轻量级的日志采集组件 Filebeat 讲解与实战操作
  • C# 委托和事件
  • 数据结构与算法之字典: Leetcode 349. 两个数组的交集 (Typescript版)
  • day-56 代码随想录算法训练营(19)动态规划 part 16
  • 蓝桥等考Python组别四级005
  • 【Linux】diff 命令
  • 【51单片机】9-定时器和计数器
  • 2023年海南省职业院校技能大赛(高职组)信息安全管理与评估赛项规程
  • 大模型深挖数据要素价值:算法、算力之后,存储载体价值凸显
  • AI文章,AI文章生成工具
  • mac有必要用清理软件吗?有哪些免费的清理工具
  • React 全栈体系(十八)
  • TCP/UDP
  • c++内存对齐
  • leetcode 33. 搜索旋转排序数组
  • VCS flow学习
  • 微信扫码关注公众号登录功能php实战分享
  • Git 精简快速使用
  • 线性约束最小方差准则(LCMV)波束形成算法仿真
  • 什么是内容运营?
  • 搭建安信可小安派Windows 开发环境
  • XML文件反序列化读取
  • 会议剪影 | 思腾合力受邀参加2023第二届世界元宇宙大会并作主题演讲
  • 加密算法、哈希算法及其区别+国密简介
  • LeetCode算法二叉树—222. 完全二叉树的节点个数