什么是JSON
前后端分离时代:
一、简介:
1.1、概述
1:JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。
2:采用完全独立于编程语言的文本格式来存储和表示数据。
3:简洁和清晰的层次结构使得JSON成为理想的数据交换语言。
4:易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在JavaScript语言中,一切都是对象。因此,任何JavaScript支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:
对象表示为键值对,数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
1.2、JSON键值对
JSON键值对是用来保存JavaScript对象的一种方式,和JavaScript对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号” “包裹,使用冒号∶分隔,然后紧接着值:
{“name”:”幺鸡”}
{“age”:”18”}
{“sex”:”男”}
很多人搞不清楚JSON和JavaScript对象的关系,甚至连谁是谁都不清楚。其实,可以这么理解:
- JSON是JavaScript对象的字符串表示法,它使用文本表示一个JS对象的信息,本质是一个字符串。
Var obj = {a : ”hello”, b : “word”}; //这是一个对象,注意简明也是可以用引号包裹的
Var json = ‘{“a” : “hello”, “b”: “word”}’; //这是一个JSON字符串,本质就是一个字符串。
1.3、JSON和JavaScript对象转换
- 要想实现JSON字符串转换成JavaScript对象,要使用JSON.parse()方法:
var obj = JSON. parse( ’ { “a”: “Hello”,“b”: “world”“)’);
//结果是{a: ” He1lo” , b: “world” } - 要实现从JavaScript对象转换为JSON字符串,使用JSON.stringify()方法:
var json = JSON .stringify({a: ” Hello” , b: “world” });
//结果是 ‘{“a” : “hello”, “b”: “word”}’
1.4、测试
1:创建一个新的web项目;
2:在web创建一个新的 .html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script type="text/javascript">
//编写一个JavaScript对象
var user = {
name:"铁锤",
age:3,
sex:"男"
};
console.log(user);
//将js对象转换成JSON对象
var json = JSON.stringify(user);
console.log(json);
console.log("==========");
//将JSON对象转换成js对象
var parse = JSON.parse(json);
console.log(parse);
</script>
</body>
</html>
3:浏览器打开,查看控制台
二、Controller返回JSON数据
- Jackson应该是目前比较好的json解析工具了
- 当然工具不止这—个,比如还有阿里巴巴的fastjson等等。·我们这里使用Jackson,使用它需要导入它的jar包;
1.1、Jackson的使用
1:创建一个新的web项目;导入jackson依赖
2:配置SpringMVC,要解决JSON的乱码问题
<!--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:创建一个controller包,新建一个类Jackson包下的ObjectMapper; 通过ObjectMapper下的writeValueAsString方法 生成字符串
注意:
- @RestController //他直接返回一个字符串,不会走视图解析器
- @Controller 他会走视图解析器
- @ResponseBody//(配合Controller使用的)它不会走视图解析器,会返回一个字符串
- @RequestMapping(value = “/j1” ,produces = “application/json;charset=utf-8”),解决一个JSON的乱码问题,当然不会这样在注解上实现,SpringMVC 给我们配置好了,只需要加上一个配置文件就好了,上面有写。
//@Controller 他会走视图解析器
@RestController //他直接返回一个字符串
public class UserController {
// @RequestMapping(value = "/j1" ,produces = "application/json;charset=utf-8")
@RequestMapping("/j1")
@ResponseBody//(配合Controller使用的)它就不会走视图解析器,会返回一个字符串
public String json1() throws JsonProcessingException {
//Jackson, ObjectMapper
ObjectMapper mapper = new ObjectMapper();
User user = new User("铁锤",18,"男");
String str = mapper.writeValueAsString(user);
return str;
}
测试结果:
返回对象字符串的方式
//返回一个对象的字符串
@RequestMapping("/j2")
public String json2() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
ArrayList<User> userList = new ArrayList<>();
User user1 = new User("铁锤",18,"男");
User user2 = new User("铁锤",18,"男");
User user3 = new User("铁锤",18,"男");
User user4 = new User("铁锤",18,"男");
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
String string = mapper.writeValueAsString(userList);
return string;//new ObjectMapper().writeValueAsString(userList);
}
测试结果:
返回日期字符串的方式:
两种方式:
1:传统的Java程序解决
2:使用ObjectMapper的格式化解决
//返回一个时间的字符串
@RequestMapping("/j3")
public String json3() throws JsonProcessingException {
//1:传统的java程序解决
//2:使用ObjectMapper 来格式化输出
ObjectMapper mapper = new ObjectMapper();
//自定义日期的格式
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(date); //java程序返回.
return mapper.writeValueAsString(format);
}
使用使用ObjectMapper的格式化解决( mapper.configure())
//返回一个时间的字符串
@RequestMapping("/j3")
public String json3() throws JsonProcessingException {
//1:传统的java程序解决
//2:使用ObjectMapper 来格式化输出
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.CLOSE_CLOSEABLE, false);// //2:使用ObjectMapper 来格式化输出
//自定义日期的格式
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
mapper.setDateFormat(sdf);
//ObjectMapper ,时间解析后的默认格式是 Timestamp:时间戳
return mapper.writeValueAsString(date);//
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71846.html