一、什么是JSON
1.1、JSON是一种轻量级的数据交换格式。易于人阅读和编写。被广泛应用与WEB应用开发。
1.2、JSON的语法:
{ }:代表对象,对象由键值对组成。eg:{“name”:”小明” ,”age”:18} 第一个键为name,值为小明,第为键为age,值为18。键值对之间用逗号分开。
[]:代表对象数组。由多个对象组成。eg:[{“name”:”小明” ,”age”:18},{“name”:”小李” ,”age”:12}] 这个对象数组中包含两个对象。对象内的内容同上,对象之间用逗号分开。
- JSON解析:
以下三种方式都需要导入第三方jar包。JAR包下载地址。
解析所涉及到的类:
public class Student {
private String name;
private int id;
private int age;
private Grade grade;
public Student(String name, int id, int age, Grade grade) {
super();
this.name = name;
this.id = id;
this.age = age;
this.grade = grade;
}
public Student() {
super();
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Grade {
//班级名
private String className;
//班级类型
private String type;
public Grade() {
super();
}
public Grade(String className, String type) {
super();
this.className = className;
this.type = type;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
2.1、传统的官方解析。
public class demo01 {
public static void main(String[] args) throws Exception{
// 将json字符串转化为json对象
test01();
//将json对象数组转化为json对象
test02();
//将java对象转化为json字符串
test03();
//将java对象数组转化为json对象数组字符串
test04();
}
/***
* 将json字符串转化为json对象
* @throws Exception
*/
public static void test01() throws Exception {
//创建json字符串
String str= "{'name':'小明','id':1,'age':18,'grade':{'className':'一班','type':'优秀班级'}}";
//将字符串转为json对象
JSONObject jsonObject=new JSONObject(str);
//获取对象信息
System.out.println("id:"+jsonObject.getInt("id"));
System.out.println("姓名:"+jsonObject.getString("name"));
System.out.println("年龄:"+jsonObject.getInt("age"));
System.out.println("班级信息:"+jsonObject.getJSONObject("grade"));//该步获得的是对象内grade对象的信息
//获取对象内grade对象
JSONObject jsonObject2=jsonObject.getJSONObject("grade");
System.out.println("班级名称:"+jsonObject2.getString("className"));
System.out.println("班级类型:"+jsonObject2.getString("type"));
/*
执行结果:
id:1
姓名:小明
年龄:18
班级信息:{"className":"一班","type":"优秀班级"}
班级名称:一班
班级类型:优秀班级
*/
}
/***
* 将json对象数组转化为json对象
*/
public static void test02() throws Exception{
//创建json对象数组字符串
String str= "[{'name':'小明','id':1,'age':18},{'name':'小李','id':2,'age':12}]";
//将字符串转化为对象数组
JSONArray jsonArray=new JSONArray(str);
//遍历数组
for(int i=0;i<jsonArray.length();i++) {
//提取出对象
JSONObject jsonObject=jsonArray.getJSONObject(i);
System.out.println("姓名:"+jsonObject.getString("name")+",年龄:"+jsonObject.getInt("age"));
}
/*
执行结果:
姓名:小明,年龄:18
姓名:小李,年龄:12
*/
}
/***
* 将java对象转化为json字符串
*/
public static void test03() {
Student student=new Student("小花",03,18,null);
JSONObject jsonObject=new JSONObject(student);
System.out.println(jsonObject.toString());
/*
执行结果:
{"name":"小花","id":3,"age":18}
*/
}
/***
* 将java对象数组转化为json对象数组字符串
*/
public static void test04() {
List<Student> list=new ArrayList<>();
list.add(new Student("小明",1,18,null));
list.add(new Student("小李",2,12,null));
JSONArray jsonArray=new JSONArray(list);
System.out.println(jsonArray.toString());
/*
执行结果:
[{"name":"小明","id":1,"age":18},{"name":"小李","id":2,"age":12}]
*/
}
}
2.2、利用google的Gson解析
public class GsonTest {
public static void main(String[] args) {
//利用GSON将json字符串转为java对象 字符串属性要与java对象一致
testGson01();
//利用Gson将字符串转化为对象 字符串中对象还包含对象
testGson02();
//利用Gson将json对象数组转化为java对象、
testGson03();
//利用Gson将java对象转化为json字符串
testGosn04();
//利用Gson将java对象数组转化为json字符串
testGson05();
}
/***
* 利用GSON将json字符串转为java对象 字符串属性要与java对象一致
*/
public static void testGson01() {
//创建json对象 属性要与java对象的属性一致 位置顺序不要求
String str="{'name':'小明','id':1,'age':18}";
//创建Gson对象
Gson gson=new Gson();
//同过gson转化获取对象
Student student=gson.fromJson(str, Student.class);
System.out.println("id:"+student.getId()+",姓名:"+student.getName()+",年龄:"+student.getAge());
/*
执行结果:
id:1,姓名:小明,年龄:18
*/
}
/***
* 利用Gson将字符串转化为对象 字符串中对象还包含对象
*/
public static void testGson02() {
//创建json字符串 包含grade对象
String str="{'name':'小明','id':1,'age':18,'grade':{'className':'一班','type':'优秀班级'}}";
Gson gson=new Gson();
Student student=gson.fromJson(str, Student.class);
System.out.println("id:"+student.getId()+",姓名:"+student.getName()+",年龄:"+student.getAge());
//获取grade的信息
System.out.println("班级:"+student.getGrade().getClassName()+",班级类型:"+student.getGrade().getType());
/*
执行结果:
id:1,姓名:小明,年龄:18
班级:一班,班级类型:优秀班级
*/
}
/**
* 利用Gson将json对象数组转化为java对象、
*/
public static void testGson03() {
String str="[{'name':'小明','id':1,'age':18},{'name':'小李','id':2,'age':12}]";
Gson gson=new Gson();
//用google的类型转化器转化类型
TypeToken<List<Student>> token=new TypeToken<List<Student>>(){};
List<Student> list=gson.fromJson(str, token.getType());
for (Student student : list) {
System.out.println("id:"+student.getId()+",姓名:"+student.getName()+",年龄:"+student.getAge());
}
/*
执行结果:
id:1,姓名:小明,年龄:18
id:2,姓名:小李,年龄:12
*/
}
/**
* 利用Gson将java对象转化为json字符串
*/
public static void testGosn04(){
Student student=new Student("小明",1,18,null);
Gson gson=new Gson();
String str=gson.toJson(student);//转化为字符串
System.out.println(str);
/*
执行结果:
{"name":"小明","id":1,"age":18}
*/
}
/***
* 利用Gson将java对象数组转化为json字符串
*/
public static void testGson05() {
List<Student> list=new ArrayList<>();
list.add(new Student("小明",1,18,null));
list.add(new Student("小李",2,12,null));
Gson gson=new Gson();
String str=gson.toJson(list);
System.out.println(str);
/*
执行结果:
[{"name":"小明","id":1,"age":18},{"name":"小李","id":2,"age":12}]
*/
}
}
2.3、利用阿里巴巴的Fastjson解析
public class TestFastjson {
public static void main(String[] args) {
// 将json字符串转化为java对象
test01();
//将java对象转化为json字符串
test02();
//将json对象数组转化为java对象
test03();
}
/***
* 将json字符串转化为java对象
*/
public static void test01() {
String str="{'name':'小明','id':1,'age':18}";
//将json字符串转化为java对象
Student student=JSON.parseObject(str,Student.class);
System.out.println("id:"+student.getId()+",姓名:"+student.getName()+",年龄:"+student.getAge());
/*
执行结果:
id:1,姓名:小明,年龄:18
*/
//还可将json字符串转化为json对象
JSONObject jsonObject=JSONObject.parseObject(str);
System.out.println(jsonObject.getString("name"));
}
/***
* 将java对象转化为json字符串
*/
public static void test02() {
Student student=new Student("小明",1,18,null);
String json=JSON.toJSONString(student);
System.out.println(json);
/*
执行结果:
{"age":18,"id":1,"name":"小明"}
*/
}
/***
* 将json对象数组转化为java对象
*/
public static void test03(){
String str="[{'name':'小明','id':1,'age':18},{'name':'小李','id':2,'age':12}]";
List<Student> list=JSON.parseArray(str, Student.class);
for (Student student : list) {
System.out.println("id:"+student.getId()+",姓名:"+student.getName()+",年龄:"+student.getAge());
}
/*
执行结果:
id:1,姓名:小明,年龄:18
id:2,姓名:小李,年龄:12
*/
}
}