Json

  • 什么是 Json?
    • JSON 和 JavaScript 对象互转
  • Jackson
    • 统一乱码解决
    • 返回 Json 字符串统一解决
    • Json 返回集合
    • Json 输出时间对象
    • 抽取工具类
  • fastjson

更多内容参见 SpringMVC 学习笔记目录:【Spring MVC】学习笔记汇总

什么是 Json?

JSON(JavaScript Object Notation)

  • 是一种轻量级的数据交换格式,目前使用特别广泛。
  • 采用完全独立于编程语言的文本格式来存储和表示数据。
  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

Json 语法格式:

{"name": "QinJiang"}
{"age": "3"}
{"sex": "男"}
var obj = {a: 'Hello', b: 'World'}; // 这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; // 这是一个 JSON 字符串,本质是一个字符串

JSON 和 JavaScript 对象互转

JSON字符串 转换为 JavaScript 对象,使用 JSON.parse() 方法:

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

JavaScript 对象 转换为 JSON字符串,使用 JSON.stringify() 方法:

var json = JSON.stringify({a: 'Hello', b: 'World'});
// 结果是 '{"a": "Hello", "b": "World"}'

测试代码:

// 编写一个 js对象
var user = {name : "yusael",age : 3,sex : "男"
};
// 将 js对象 转为 json字符串
var str = JSON.stringify(user);
console.log(str);
// 将 json字符串 转为js对象
var userObj = JSON.parse(str);
console.log(userObj);

Jackson

Jackson 应该是目前比较好的 json 解析工具了

当然工具不止这一个,比如还有阿里巴巴的 fastjson 等等。

使用 Jackson,使用它需要导入它的 jar 包:

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

使用 json 注意 解决乱码问题:用 @RequestMapingproduces 指定响应体返回类型和编码。

  • @RequestMapping(value = "/json", produces = "application/json;charset=utf-8")
@Controller
public class UserController {// 解决乱码问题@RequestMapping(value = "/json", produces = "application/json;charset=utf-8")@ResponseBodypublic String json() throws JsonProcessingException {// 创建一个 jackson 的对象映射器, 用来解析数据ObjectMapper mapper = new ObjectMapper();// 创建一个对象User user = new User(1, "zhenyu", "男");// 将对象解析成 json 格式String str = mapper.writeValueAsString(user);System.out.println(str);// 由于@ResponseBody注解, 这里会将 str 转成 json 格式返回return str;}
}

统一乱码解决

通过 @RequestMapping(value = "/json", produces = "application/json;charset=utf-8") 解决乱码比较麻烦,如果项目中有许多请求则每一个都要添加,可以通过 Spring 配置统一指定,这样就不用每次都去处理了。

我们可以在 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>

返回 Json 字符串统一解决

在类上直接使用 @RestController,这样子,里面所有的方法都只会返回 Json 字符串了,不用再每一个都添加 @ResponseBody。在前后端分离开发中,一般都使用 @RestController,十分便捷。

@RestController // 使得所有方法都返回 Json 字符串
public class UserController {@RequestMapping(value = "/json")public String json() throws JsonProcessingException {// 创建一个 jackson 的对象映射器, 用来解析数据ObjectMapper mapper = new ObjectMapper();// 创建一个对象User user = new User(1, "zhenyu", "男");// 将对象解析成 json 格式String str = mapper.writeValueAsString(user);System.out.println(str);// 由于@RestController 注解, 这里会将 str 转成 json 格式返回;return str;}
}

Json 返回集合

@RequestMapping("/json1")
public String json2() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();User user1 = new User(1, "Jack", "男");User user2 = new User(2, "Rose", "女");User user3 = new User(3, "Kitty", "女");User user4 = new User(4, "Jerry", "男");User user5 = new User(5, "Yusael", "男");List<User> users = new ArrayList<>();users.add(user1);users.add(user2);users.add(user3);users.add(user4);users.add(user5);String str = mapper.writeValueAsString(users);return str;
}

Json 输出时间对象

默认日期格式是 时间戳 —— 1970年1月1日到当前日期的毫秒数。

  • Jackson 默认是会把时间转成 timestamps 形式。
@RequestMapping("/json2")
public String json2() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();Date date = new Date();String str = mapper.writeValueAsString(date);return str;
}

解决方案:取消 timestamps 形式,自定义时间格式。

@RequestMapping("/json3")
public String json3() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();// 设置不使用时间戳的格式mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);// 自定义日期格式对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 指定日期格式mapper.setDateFormat(sdf);Date date = new Date();String str = mapper.writeValueAsString(date);return str;
}

抽取工具类

如果要经常使用的话,这样是比较麻烦的,我们可以将这些代码封装到一个工具类中;

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);Date date = new Date();try {return mapper.writeValueAsString(date);} catch (JsonProcessingException e) {e.printStackTrace();}return null;}}

使用工具类,代码就变得更加简单了。

@RequestMapping("/json4")
public String json4() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();return JsonUtils.getJson(new Date());
}

fastjson

fastjson.jar 是阿里开发的一款专门用于 Java 开发的包,可以方便的实现 json 对象与 JavaBean 对象的转换,实现 JavaBean 对象与 Json 字符串的转换,实现 Json 对象 与 Json字符串 的转换。

实现 Json 的转换方法很多,最后的实现结果都是一样的。

fastjson 的 pom 依赖:

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

fastjson 中三个主要的类:

  • JSONObject 代表 Json 对象
    JSONObject 实现了 Map 接口, 猜想 JSONObject 底层操作是由 Map 实现的。
    JSONObject 对应 Json 对象,通过各种形式的 get() 方法可以获取 Json 对象中的数据,也可利用诸如 size()isEmpty() 等方法获取 “键 : 值对” 的个数和判断是否为空。其本质是通过实现 Map 接口并调用接口中的方法完成的。

  • JSONArray 代表 Json 对象数组
    内部是由 List 接口中的方法来完成操作的。

  • JSON 代表 JSONObject 和 JSONArray 的转化

测试代码:

public class FastJsonDemo {public static void main(String[] args) {User user1 = new User(1, "Jack", "男");User user2 = new User(2, "Rose", "女");User user3 = new User(3, "Kitty", "女");User user4 = new User(4, "Jerry", "男");User user5 = new User(5, "Yusael", "男");List<User> list = new ArrayList<User>();list.add(user1);list.add(user2);list.add(user3);list.add(user4);list.add(user5);System.out.println("*******Java对象 转 JSON字符串*******");String str1 = JSON.toJSONString(list);System.out.println("JSON.toJSONString(list) ==> " + str1);String str2 = JSON.toJSONString(user1);System.out.println("JSON.toJSONString(user1) ==> " + 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(user2);System.out.println("(JSONObject) JSON.toJSON(user2) ==> " + 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);}}

【SpringMVC 笔记】Json 交互处理相关推荐

  1. java多图片上传json_[Java教程]SpringMVC框架五:图片上传与JSON交互

    [Java教程]SpringMVC框架五:图片上传与JSON交互 0 2018-08-07 22:00:42 在正式图片上传之前,先处理一个细节问题: 每一次发布项目,Tomcat都会重新解压war包 ...

  2. SpringMVC的json数据交互

    SpringMVC的json数据交互 @RequestBody 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConver ...

  3. JAVAWEB开发之SpringMVC详解(二)——高级开发、数据回显、参数绑定集合、图片上传、json交互、validation校验、异常处理、RESTful支持、拦截器

    知识回顾 springmvc框架 用户请求url到DispatcherServlet前端控制器,相当于中央调度器,降低系统各组件之间的耦合度. DispatcherServlet前端控制器通过Hand ...

  4. springMVC笔记系列(22)——Json各类操作在springMVC中的实现

    说明:本文章的内容转载至:https://my.oschina.net/happyBKs/blog/420310 如有侵权的地方,请联系本人,本人将会立即删除! Json使得更多的开发可以在单页面完成 ...

  5. SpringMVC获取前端传来的json数据的四种方法(前后端json交互总结)

    一.导包 一定要有 Jackson 的jar包依赖,就算有了fastjson,也要有Jackson包 <dependency><groupId>com.fasterxml.ja ...

  6. 狂神SpringMvc笔记

    目录 SpringMvc笔记 一.什么是mvc 1.Model2时代 2.回顾Servlet 4.Spring MVC的特点: 5.中心控制器 6.SpringMVC执行原理 7. 第一个MVC程序 ...

  7. 【狂神说JAVA】SpringMVC笔记

    最近在学习java框架,发现狂神说的视频挺好的,通俗易懂,还有笔记,整理过来,以便随时复习回顾. 狂神说springmvc 视频链接: B站视频 springmvc 系列笔记 狂神说SpringMVC ...

  8. html5 java交互_html5+jquery与ssm进行json交互集成项目

    [实例简介] eclipse 下html5+jquery+springmvc+spring+mybatis进行json交互集成项目,基础搭建项目,具体版本参考lib下包的版本号 [实例截图] [核心代 ...

  9. java多图片上传json_SpringMVC框架五:图片上传与JSON交互

    在正式图片上传之前,先处理一个细节问题: 每一次发布项目,Tomcat都会重新解压war包,之前上传过的图片会丢失 为了解决这个问题:可以不在Tomcat下保存图片,而是另找一个目录. 上传图片: 在 ...

  10. Spring Mvc 数据回显、异常处理、文件上传、json交互、ResTful、拦截器的使用(高级三)

    1,数据回显 SpringMvc包含三种数据回显机制 第一种:对于简单数据类型,如:Integer.String.Float等使用Model将传入的参数再放到request域实现显示. (回顾jsp四 ...

最新文章

  1. Conv1D和Conv2D的区别
  2. ZBrush全面入门学习教程 Schoolism – Introduction to ZBrush
  3. Datawhale来杭电啦!
  4. php正则邮箱验证,php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)...
  5. [转] java的 Collection 和 Map 详解
  6. ASP.NET协作应用集成到trsids身份验证服务器的开发流程
  7. 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)
  8. 剑指offer 二进制中1的个数
  9. rust拆掉墙_rust怎么拆自己的墙
  10. 富文本编辑器 CKeditor 配置使用
  11. solr通过连接数据库删除document 总结
  12. 速达软件各版本及产品ID
  13. Java设计模式--单例模式(代码详解懒汉、饿汉模式)
  14. vscode 快速生成vue模板
  15. 大数据——海量数据处理的基本方法总结
  16. wsl 搭建 ubantu环境
  17. 关于子函数的调用和终止
  18. 奔驰S400升级主动式氛围灯,大饼轮毂,4D旋转高音
  19. 破解“低代码”的4大误区,拥抱低门槛高效率的软件开发新选择
  20. 计算机组成实验第一关——汉字国标码转区位码实验【详细步骤版】

热门文章

  1. 手机一般都由富士康等企业代工,是不是意味着各品牌质量都差不多?
  2. SQL Server事务日志采访问题
  3. olap 多维分析_如何通过依赖T-SQL从OLAP多维数据集有效地提取数据
  4. php7 on winxp 支持的模块
  5. 洛谷2657 windy数(数位DP)
  6. jmeter 参数化
  7. InvocationException: GraphViz's executables not found
  8. 一个搜索迷宫出路的程序
  9. swing学习一(swing介绍、swing样例、布局管理器)
  10. vi 命令 使用方法