JavaScript Object Notation ,JS对象简谱 ,是一种轻量级的数据交换格式。
JSON的优点:
(1)数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
(2)易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;
(3)支持多种语言,包括服务器端各语言的解析;
(4)因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。
JSON的缺点:
(1)没有xml格式这么推广的深入人心和喜用广泛,没有xml那么通用性;
(2)JSON格式目前在webservice中推广还属于初级阶段;
对象格式:
对象,由大括号{}
表示,大括号中可以描述对象的属性,并用键值对的形式来表示。
键值对中的键和值用冒号:
分隔。
多个键值对之间用逗号,
分隔。
键值对的值可以是JavaScript中任意的数据类型。
键值对的键建议用双引号引住,通常在JAVA解析时,如果键不用双引号,那么会报错。但是在JS中不会报错。
数组格式:
在JSON格式中数组可以与对象互相嵌套,一个数组以[
开始,以]
结束。每个值之间用,
分隔。
例如: [元素1,元素2…]
主要作用:
(1)Java中的对象 快速的转换为 JSON格式的字符串。
(2)将JSON格式的字符串, 转换为Java的对象。
JSON解析对于Java开发来讲,最常用的两种类库是Gson和FastJson。
Gson:
Gson是Google提供的方便在json数据和Java对象之间转化的类库。
使用Gson首先要导入Jar包 : Jar包地址链接
解析流程:
//将对象解析为JSON字符串 引入Jar包
//1、 创建一个封装的实体类
import java.util.Objects;
public class Book {
private String id;
private String name;
private String info;
public Book() {
}
public Book(String id, String name, String info) {
this.id = id;
this.name = name;
this.info = info;
}
@Override
public String toString() {
return "Book{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", info='" + info + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Book book = (Book) o;
return Objects.equals(id, book.id) &&
Objects.equals(name, book.name) &&
Objects.equals(info, book.info);
}
@Override
public int hashCode() {
return Objects.hash(id, name, info);}
public String getId() {
return id;}
public void setId(String id) {
this.id = id;}
public String getName() {
return name;}
public void setName(String name) {
this.name = name;}
public String getInfo() {
return info;}
public void setInfo(String info) {
this.info = info;}
}
//2、 在测试类中进行Gson解析
import com.google.gson.Gson;
public class GsonTest01 {
public static void main(String[] args) {
Book b = new Book("1001","三国","火烧赤壁"); //创建Book对象
// Gson g = new Gson(); //创建Gson对象
String text = g.toJson(b); //将该对象转换为字符串
System.out.println(text);
}
}
//执行结果:{"id":"1001","name":"三国","info":"火烧赤壁"}
//将字符串转换为对象 引入Jar包
//格式:对象 = new Gson().fromJson(JSON字符串,对象类型.class);
public class GsonTest02{
public static void main(String[] args){
Gson g = new Gson(); //创建Json对象
Book b = g,fromJson("{"\id\":\"1001\",\"name\":\"三国",\"info\":\"火烧赤壁\"}",Book.class);
System.out.pritnln(b.getId());
System.out.pritnln(b.getName());
System.out.pritnln(b.getInfo());
}
}
/*执行结果:
1001
三国
火烧赤壁*/
//当Json字符串中包含数组 例如:{"id":"1001","name":"三国演义","info":["三顾茅庐","草船借箭","火烧赤壁"]}
public class GsonTest03{
public static void main(String[] args){
Gson g = new Gson();
HashMap hashMap = g.fromJson("{\"id\":\"1001\",\"name\":\"三国演义\",\"info\":[\"三顾茅庐\",\"草船借箭\",\"火烧赤壁\"]}", HashMap.class); //将其转换为Map集合
ArrayList arrayList = (ArrayList) hashMap.get("info");//集合中的内容是以ArrayList存在的
System.out.println(arrayList.get(1));
}
}
FastJson:
Fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。
FastJson的Jar包地址:Jar包地址链接
//将对象转换为JSON字符串
public class FastJsonTest01 {
public static void main(String[] args) {
Book book = new Book("1001","水浒传","一百单八将");
String s = JSON.toJSONString(book);
System.out.println(s);
}
}
//执行结果:{"id":"1001","info":"一百单八将","name":"水浒传"}
//将JSON字符串转换为集合 例如:{"id":"1001","info":"一百单八将","name":"水浒传"}
public class FastJsonTest02{
public static void main(String[] args){
Map hashMap = JSON.parseObject("{\"id\":\"1001\",\"info\":\"一百单八将\",\"name\":\"水浒传\"}", HashMap.class);
System.out.println(hashMap.get("id"));
}
}
//执行结果:1001
//将JSON数组转换为字符串 例如:["一二三四","四三二一","二三四五"]
public class FastJsonTest03 {
public static void main(String[] args) {
List<String> strings = JSON.parseArray("[\"一二三四\",\"四三二一\",\"二三四五\"]", String.class);
System.out.println(strings.get(1));
}
}
//执行结果:四三二一