JSON
JSON是JavaScript Object Notation - JS对象简谱,是一种轻量级的数据交换格式。
什么是JSON数据?
可以看一下下面一段代码对比:
Java
class Book{
private String name;
private String info;
get/set...
}
Book b = new Book();
b.setName(“金苹果”);
b.setInfo(“种苹果”);
...
JSON:
{
"name":"金苹果",
"info":"种苹果"
}
通过对比我们可以看出JSON在数据存储这一块比Java更简洁明了。
其实JSON数据就是一段字符串而已,只不过有不同意义的分隔符将其分割开来而已,我们看上面的符号,里面有[] ,{}等符号,其中
- []中括号代表的是一个数组;
- {}大括号代表的是一个对象
- 双引号“”表示的是属性值
- 冒号:代表的是前后之间的关系,冒号前面是属性的名称,后面是属性的值,这个值可以是基本数据类型,也可以是引用数据类型。
注意
1.{}可以无限嵌套,里面的对象可以是{}。
2.键要用双引号括起来,通常Java解析时, 键不使用引号会报错, 而JS能正确解析。
我们看看下面案例:
{
"name":"whc",
"age":20,
"friend":["张三","王二","麻子",{
"name":"小新",
"info":"很开心"
}],
"heihei":{
"name":"跳高",
"length":"150m"
}
}
体现了可以嵌套的特点,里面的属性可以是引用数据类型也可以是基本数据类型,例如上面的“age”:20.
JSON解析方式
在了解了JSON的基础含义后,我们可以学习解析JSON的方式,目前有两种主流的解析方式,分别是Google公司的Gson解析和阿里巴巴的FastJson解析。
Gson解析
将对象转化为JSON字符串
步骤:
1.首先创建一个Gson对象
2.调用toJson()方法,传入参数是需要转换的对象。
String json = new Gson().toJSON(要转换的对象);
示例:
public class Demo1 {
public static void main(String[] args) {
//1. 创建Gson对象
Gson g = new Gson();
//2. 转换
Book book = new Book("100","平凡的世界","锄禾日党务");
String s = g.toJson(book);
System.out.println(s);
}
}
输出结果:
{"id":"100","name":"金苹果","info":"锄禾日党务"}
将JSON字符串转换为对象
步骤:
对象 = new Gson().fromJson(JSON字符串,对象类型.class);
示例:
public class Demo2 {
public static void main(String[] args) {
//1. 创建Gson对象
Gson g = new Gson();
//2. 转换 {"id":100,"name":"平凡的世界","info":"国内文学作品"}
//需要进行 转义
String json = "{\"id\":100,\"name\":\"金苹果\",\"info\":\"锄禾日当午\"}";
Book book = g.fromJson(json,Book.class);
System.out.println(book);
System.out.println(book.getInfo());
}
}
输出结果是:
Book{id='100', name='金苹果', info='锄禾日当午'}
国内文学作品
当没有某一类对象时,时常转为map集合:
public class Demo2 {
public static void main(String[] args) {
Gson g = new Gson();
//转集合
HashMap data = g.fromJson("{\"id\":100,\"name\":\"金苹果\",\"info\":\"锄禾日当午\"}", HashMap.class);
System.out.println(data.get("name"));
System.out.println(data);
输出结果:
平凡的世界
{name=金苹果, id=100.0, info=锄禾日当午}
FastJson解析
将对象转换为JSON字符串
String json = JSON.toJSONString(要转换的对象);
示例:
package com.java.demo2;
import com.alibaba.fastjson.JSON;
public class Demo4 {
public static void main(String[] args) {
Book book = new Book("1002","唐诗三百首","床前明月光,地上鞋一堆。床上我杰哥,喊十块钱一双。");
//1. 转换
String json = JSON.toJSONString(book);
System.out.println(json);
}
}
输出结构:
{"id":1002,"info":"唐诗三百首","name":"床前明月光,地上鞋一堆。床上我杰哥,喊十块钱一双。"}
将JSON字符串转换为对象/集合
步骤
类型 对象名 = JSON.parseObject(JSON字符串,类型.class);
或
List<类型> list = JSON.parseArray(JSON字符串,类型.class); //传入集合
示例:
public class Demo5 {
public static void main(String[] args) {
String json = "{\"id\":1002,\"info\":\"锄禾日党务\",\"name\":\"金苹果\"}";
//1. 转换 - 对象
Book book = JSON.parseObject(json,Book.class);
System.out.println(book);
System.out.println(book.getId());
}
}
结果是:
Book{id='1002', name='金苹果', info='锄禾日党务'}
1002
注意
在解析之前 要先导入jar包