1,什么是 JSON ?
json的全称为:JavaScript Object Notation,是一种轻量级的数据交互格式。
采用完全独立于编程语言的文本格式来存储和表示数据
背景:数据传输是我们在敲代码时,经常遇到的一个场景,前后端交互。给数据一个统一的格式有利于我们编写和解析数据。
2,JSON的格式
json中含有两种复合类型的值:数组、对象
基本类型的值有四种:字符串、数值(必须以十进制表示)、布尔值、null
要求:
- 字符串必须使用双引号表示,不能使用单引号。
- 对象的键名最好放在双引号里面。
- 成员之间使用逗号隔开
- 复合数据类型之间可以嵌套
例如:
{
"name":"伟杰老师",
"age":18,
"pengyou":["张三","李四","王二","麻子",{
"name":"野马老师",
"info":"像匹野马一样狂奔在技术钻研的道路上"
}],
"heihei":{
"name":"大长刀",
"length":"40m"
}
}
3,JSON相较于XML的优势
JSON数据量小,容易解析,传输速度更快
4,Java对JSON数据的解析方式
(1)Gson
Gson是Google公司发布的一个开放源代码的库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串为Java对象。
将对象序列化为JSON字符串:
public class Book {
private String name;
private int bookId;
private String info;
public Book() {}
public Book(String name, int bookId, String info) {
this.name = name;
this.bookId = bookId;
this.info = info;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBookId() {
return bookId;
}
public void setBookId(int bookId) {
this.bookId = bookId;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", bookId=" + bookId +
", info='" + info + '\'' +
'}';
}
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", bookId=" + bookId +
", info='" + info + '\'' +
'}';
}
//为了代码简洁,省去get/set方法
}
public static void main(String[] args) {
Book book = new Book("三国演义", 1001, "讲述了三国时期的战乱故事");
Gson gson = new Gson();//导入json的jar包
String s = gson.toJson(book);//传入一个对象,将其序列化为JSON字符串
System.out.println(s);
}
结果:
将JSON字符串解析为Java对象:
public static void main(String[] args) {
//导入json的jar包
Gson gson = new Gson();
//将JSON字符串解析为指定类的对象
Book book = gson.fromJson("{\"name\":\"三国演义\",\"bookId\":1001,\"info\":\"讲述了三国时期的战乱故事\"}", Book.class);
System.out.println(book);
}
结果:
(2)FastJson
fastjson是阿里巴巴开发的库,作用与gson类似
将对象序列化为JSON字符串:
package com.kkb.task010307;
import com.alibaba.fastjson.JSON;//引入fastjson的jar包并导入
public class Demo4 {
public static void main(String[] args) {
Book book = new Book("西游记", 1005, "师徒四人西天取经");
//将对象序列化为JSON字符串
String jsonString = JSON.toJSONString(book);
System.out.println(jsonString);
}
}
结果:
将JSON字符串(JSON对象)解析为Java对象:
package com.kkb.task010307;
import com.alibaba.fastjson.JSON;
class Demo5 {
public static void main(String[] args) {
//将JSON字符串解析为Java对象
Book book = JSON.parseObject("{\"bookId\":1005,\"info\":\"师徒四人西天取经\",\"name\":\"西游记\"}", Book.class);
System.out.println(book);
}
}
结果:
将JSON字符串(JSON数组)解析为数组:
返回一个List对象
package com.kkb.task010307;
import com.alibaba.fastjson.JSON;
import java.util.List;
public class Demo6 {
public static void main(String[] args) {
List<Object> objectList = JSON.parseArray("[1010,\"哈哈哈\",true,null]", Object.class);
System.out.println(objectList);
}
}
结果:
注意: 使用fastjson对Java对象进行序列化时,要求该对象是一个javabean,包含get/set方法。因为fastjson对Java对象序列化时,通过get方法获取属性并序列化;而gson则是通过反射获取属性并序列化。