参考笔记:JavaWeb 速通JSON_java webapi调用传json与head-CSDN博客
目录
4.2.1 JSON字符串 <-----> JavaBean
4.2.2 Map、List、Array ------> JSON字符串
1.JSON基本介绍
① JSON 全称 JavaScript Object Notation ,即 JavaScript 对象表示法
② JSON 是轻量级的文本数据交换格式,使用广泛
③ JSON 独立于语言,即 Java、PHP、asp.net 等都可以使用 JSON
④ JSON 主要服务于前后端的数据交互,将前端响应到后端的对象数据、后端响应到前端的对象数据用 JSON 格式进行传输,如下所示:
2.JSON串的格式
JSON 串是一个字符串,其定义格式与 JS 中通过 {} 定义对象的方式很类似,但要注意 JSON 中的每个 key 都要加双引号 "key" ,value 可以是 string、number、object、 array、boolean、null 类型。具体如下:
/* 定义一个JSON串 */
var personStr ='{"name":"张小明","age":20,"girlFriend":{"name":"铁铃","age":23},"foods":["苹果","香蕉","橘子","葡萄"],"pets":[{"petName":"大黄","petType":"dog"},{"petName":"小花","petType":"cat"}]}'
3.JSON在客户端/浏览器的使用
3.1 JavaScript对象和JSON串的相互转换
常用方法
① JSON.stringify(JS对象):将一个 JS 对象转换为一个 JSON 字符串
② JSON.parse(jsonString):将一个 JSON 字符串转换成一个 JS 对象
3.2 案例演示
案例1:使用 JSON.stringify(JS对象) 将一个 JS 对象转换为一个 JSON 字符串
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript">
window.onload = function () {
//定义一个JS对象
var person = {
'name': '张小明',
'age': 20,
'girlFriend': {
'name': '铁铃',
'age': 23
},
'foods': ['苹果', '香蕉', '橘子', '葡萄'],
'pets': [
{
'petName': '大黄',
'petType': 'dog'
},
{
'petName': '小花',
'petType': 'cat'
}
]
}
//模拟要将这个JS对象person从前端发往后端
//先将JS对象转换为JSON串
var personStr = JSON.stringify(person)
console.log(typeof personStr)
console.log(personStr)
//然后将JSON串发送到后端....
}
</script>
</head>
<body bgcolor="#e0ffff">
<h2 style="color: pink">请查看控制台打印出的信息捏~</h2>
</body>
</html>
输出结果:
可以看到,JSON 串的类型确实是 string 类型
案例2:使用 JSON.parse(jsonString) 将一个 JSON 字符串转换成一个 JS 对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript">
window.onload = function () {
//定义一个JSON字符串,假设是从后端接收到的
var personStr ='{"name":"小马","age":20,"hobby":["swim","sing","rap"]}'
//JSON字符串 ----> JS对象
var person = JSON.parse(personStr)
//访问该对象的属性
console.log(person)
console.log(person.name)
console.log(person.age)
console.log(person.hobby)
}
</script>
</head>
<body bgcolor="#e0ffff">
<h2 style="color: pink">请查看控制台打印出的信息捏~</h2>
</body>
</html>
输出结果:
4.JSON在服务端的使用
此处以 Java 为例子
4.1 基本说明
有很多第三方类库提供了 Java 对象和 JSON 串数据相互转换的方法,比如 Gson、Jackson、Fastjson 等等,这里我们使用 Jackson,需要引入的 jar 包如下:
4.2 应用场景
4.2.1 JSON字符串 <-----> JavaBean
import com.fasterxml.jackson.databind.ObjectMapper;
public class demo {
public static void main(String[] args) throws Exception {
//创建Jackson工具类
ObjectMapper objectMapper = new ObjectMapper();
/**演示JavaBean ----> JSON字符串的流程*/
//创建一个Java对象
Student student = new Student("小马", 97);
//调用writeValueAsString方法,将JavaBean ----> JSON字符串
String studentStr = objectMapper.writeValueAsString(student);
System.out.println(studentStr);
/**演示JSON字符串 ----> JavaBean的流程*/
//定义一个JSON字符串,假设是从前端接收到的
String jsonStr = "{\"name\":\"蔡徐坤\",\"scores\":100.0}";
//调用readValue方法,将JSON字符串 -----> JavaBean,底层用到了反射机制
Student student1 = objectMapper.readValue(jsonStr, Student.class);
System.out.println(student1);
}
}
//JavaBean实体类
class Student{
public String name;
public double scores;
public Student() {
}
public Student(String name, double scores) {
this.name = name;
this.scores = scores;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", scores=" + scores +
'}';
}
}
运行结果:
4.2.2 Map、List、Array ------> JSON字符串
这里跟 JavaBean ----> JSON 字符串使用的 API 是完全一样的,还是 writeValueAsString
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class demo {
public static void main(String[] args) throws Exception {
//创建Jackson工具类
ObjectMapper objectMapper = new ObjectMapper();
/**演示Map ----> JSON字符串的流程*/
Map map = new HashMap<>();
map.put("name","小马");
map.put("age",23);
//调用writeValueAsString方法,将 Map ----> JSON字符串
String jsonStr1 = objectMapper.writeValueAsString(map);
System.out.println(jsonStr1);
/**演示List ----> JSON字符串的流程*/
List list = new ArrayList();
list.add(new Student("蔡徐坤",23));
list.add(new Student("丁真",27));
//调用writeValueAsString方法,将 List ----> JSON字符串
String jsonStr2 = objectMapper.writeValueAsString(list);
System.out.println(jsonStr2);
/**演示Array ----> JSON字符串的流程*/
int[] arr = {4,5,6};
//调用writeValueAsString方法,将 Array ----> JSON字符串
String jsonStr3 = objectMapper.writeValueAsString(arr);
System.out.println(jsonStr3);
}
}
//JavaBean实体类
class Student{
public String name;
public double scores;
public Student() {
}
public Student(String name, double scores) {
this.name = name;
this.scores = scores;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", scores=" + scores +
'}';
}
}
输出结果: