JSON数据现在是我们开发中用的最多的,百分之九十的数据都是通过JSON方式进行传输,那么想要学好JSON解析就要了解什么是JSON数据,怎么快速解析它从而提升开发效率。
一、什么是JSON?
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
- 我们以一本书对象为例,看看在Java,JS,XML和JSON的书写区别
//Java
public class Main {
public static void main(String[] args) {
Person p = new Person();
p.setName("张三");
p.setAge(18);
p.setSex(true);
}
}
class Person {
private String name;
private int age;
private boolean sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
}
//JavaScript
var b = new Object();
b.name = "张三";
b.age = 18;
b.sex = true;
//XML
<Person>
<name>张三</name>
<age>18</age>
<sex>男</sex>
</Person>
//JSON
{
"name":"张三",
"age":18,
"sex":"男"
}
JSON数据中,一个对象, 由一个大括号表示,括号中描述对象的属性,另外,在JSON格式中可以与对象互相嵌套。[元素1,元素2…]
- []中括号代表的是一个数组;
- {}大括号代表的是一个对象 双引号“”表示的是属性值
- 冒号:代表的是前后之间的关系,冒号前面是属性的名称,后面是属性的值,这个值可以是基本数据类型,也可以是引用数据类型。
案例
{
"reason": "查询成功",
"result": {
"city": "苏州",
"realtime": {
"temperature": "4",
"humidity": "82",
"info": "阴",
"wid": "02",
"direct": "西北风",
"power": "3级",
"aqi": "80"
},
"future": [
{
"date": "2019-02-22",
"temperature": "1/7℃",
"weather": "小雨转多云",
"wid": {
"day": "07",
"night": "01"
},
"direct": "北风转西北风"
},
{
"date": "2019-02-23",
"temperature": "2/11℃",
"weather": "多云转阴",
"wid": {
"day": "01",
"night": "02"
},
"direct": "北风转东北风"
},
{
"date": "2019-02-24",
"temperature": "6/12℃",
"weather": "多云",
"wid": {
"day": "01",
"night": "01"
},
"direct": "东北风转北风"
},
{
"date": "2019-02-25",
"temperature": "5/12℃",
"weather": "小雨转多云",
"wid": {
"day": "07",
"night": "01"
},
"direct": "东北风"
},
{
"date": "2019-02-26",
"temperature": "5/11℃",
"weather": "多云转小雨",
"wid": {
"day": "01",
"night": "07"
},
"direct": "东北风"
}
]
},
"error_code": 0
}
二、Java可以使用JSON做什么?
- 将Java中的对象 快速的转换为 JSON格式的字符串.
- 将JSON格式的字符串, 转换为Java的对象.
三、Gson解析
1、将对象转换为JSON字符串
转换JSON字符串的步骤:
- 引入JAR包(点击下载)
- 在需要转换JSON字符串的位置编写如下代码即可:
String json = new Gson().toJSON(要转换的对象);
案例
import com.google.gson.Gson;
public class Demo1 {
public static void main(String[] args) {
//1、 创建Gson对象
Gson g = new Gson();
//2、 转换
String s = g.toJson(new Person("陈思越",25,true));
System.out.println(s);
}
}
运行结果
{"name":"陈思越","age":25,"sex":true}
2、将JSON字符串转换为对象
- 引入JAR包
- 在需要转换Java对象的位置, 编写如下代码:
对象 = new Gson().fromJson(JSON字符串,对象类型.class);
案例
public class Demo2 {
public static void main(String[] args) {
//1、 创建Gson对象
Gson g = new Gson();
//2、 转换:{"name":"陈思越","age":25,"sex":true}
Person p = g.fromJson("{\"name\":\"陈思越\",\"age\":25,\"sex\":true}",Person.class);
System.out.println(p.getAge());
}
}
运行结果:
25
三、FastJson解析
1、将对象转换为JSON字符串
转换JSON字符串的步骤:
- 引入JAR包(点击下载)
- 在需要转换JSON字符串的位置编写如下代码即可:
String json=JSON.toJSONString(要转换的对象);
案例
import com.alibaba.fastjson.JSON;
public class Demo4 {
public static void main(String[] args) {
Person p = new Person("梁芳瑜",25,false);
String s = JSON.toJSONString(p);
System.out.println(s);
}
}
运行结果:
{"age":25,"name":"梁芳瑜","sex":false}
2、将JSON字符串转换为对象
- 引入JAR包
- List item在需要转换Java对象的位置, 编写如下代码:
类型 对象名=JSON.parseObject(JSON字符串, 类型.class);
或
List<类型> list=JSON.parseArray(JSON字符串,类型.class);
案例
import com.alibaba.fastjson.JSON;
public class Demo5 {
public static void main(String[] args) {
//转换{"age":25,"name":"梁芳瑜","sex":false}
Person p = JSON.parseObject("{\"age\":25,\"name\":\"梁芳瑜\",\"sex\":false}",Person.class);
System.out.println(p.getName());
}
}
运行结果:
梁芳瑜