JSON解析
简介:
JSON: JavaScript Object Notation JS对象简谱 , 是⼀种轻量级的数据交换格式.
优点:
易于人的阅读和编写,易于程序解析与生产。
格式
对象格式
一个对象, 由一个大括号表示.
{
"属性1": "属性1的值",
"属性2": "属性2的值",
"属性3": "属性3的值"
}
括号中描述对象的属性 ,通过键值对来描述对象的属性 (可以理解为, 大括号中, 包含的是一个个的键值对.)
格式:
键与值之间使用冒号连接, 多个键值对之间使用逗号分隔,键值对的键应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确 解析)
注意:键值对的值, 可以是JS中的任意类型的数据
数组格式
[元素1,元素2…]
注意:在JSON格式中可以与对象互相嵌套
{
"schoolName": "xxx",
"schoolLoaction": "xxxxx",
"schoolStudents": ["张三","李四","王五"]
}
Java解析JSON的方式
Gson方式
引入jar包:
或引入依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
FastJson方式
引入jar包:
或引入依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.66</version>
</dependency>
将对象转换为json字符串
/**职员类*/
public class Employee {
private String name;//姓名
private int age;//年龄
private String department;//部门
public Employee(String name,int age,String department){
this.name=name;
this.age=age;
this.department=department;
}
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 String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", age=" + age +
", department='" + department + '\'' +
'}';
}
}
1、Gson
public static void main(String[] args) {
//1.创建Gson对象
Gson g = new Gson();
//2.转换
Employee e = new Employee ("张三",20,"法务部");
String s = g.toJson(e);
System.out.println(s);
}
* 结果:
* {"name":"张三","age":20,"department":"法务部"}
* */
2、FastJson
public static void main(String[] args) {
Employee e = new Employee ("张三",20,"法务部");
//转换
String json = JSON.toJSONString(e);
System.out.println(json);
}
/**
* 结果:
* {"age":20,"department":"法务部","name":"张三"}
* */
将json字符串转换为对象
1、Gson
public static void main(String[] args) {
//1.创建Gson对象
Gson g = new Gson();
//2.转换 : {"name":"张三","age":20,"department":"法务部"}
Employee e = g.fromJson("{\"name\":\"张三\",\"age\":20,\"department\":\"法务部\"}", Employee.class);
System.out.println(e.getName());
System.out.println(e.getAge());
System.out.println(e.getDepartment());
}
/**
* 结果:
* 张三
* 20
* 法务部
* */
2、FastJson
public static void main(String[] args) {
//1.转换 : {"name":"张三","age":20,"department":"法务部"}
Employee e = JSON.parseObject("{\"name\":\"张三\",\"age\":20,\"department\":\"法务部\"}", Employee.class);
System.out.println(e.getName());
System.out.println(e.getAge());
System.out.println(e.getDepartment());
}
/**
* 结果:
* 张三
* 20
* 法务部
* */
数组转换
Employee e1 = new Employee("张三",17,"法务部");
Employee e2 = new Employee("李四",20,"技术部");
Employee e3 = new Employee("王五",23,"人力部");
Employee[] es = {e1,e2,e3};
//将对象数组转为json
String s = JSON.toJSONString(es);
System.out.println(s);
//将json转换为对象列表
List<Employee> list = JSON.parseArray(s, Employee.class);
for (Employee employee : list) {
System.out.println(employee);
}
}
/**
* 结果:
* [{"age":17,"department":"法务部","name":"张三"},{"age":20,"department":"技术部","name":"李四"},{"age":23,"department":"人力部","name":"王五"}]
* Employee{name='张三', age=17, department='法务部'}
* Employee{name='李四', age=20, department='技术部'}
* Employee{name='王五', age=23, department='人力部'}
* */