【Java Web】速通JSON
参考笔记:JavaWeb 速通JSON_java webapi调用传json与head-CSDN博客
目录
1.JSON基本介绍
2.JSON串的格式
3.JSON在客户端/浏览器的使用
3.1 JavaScript对象和JSON串的相互转换
3.2 案例演示
4.JSON在服务端的使用
4.1 基本说明
4.2 应用场景
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;}@Overridepublic 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;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", scores=" + scores +'}';}
}
输出结果: