一、JSON简介
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。
JSON数据作为目前网络中主流的数据传输格式之一,应用十分广泛。
JSON可以表示的数据
对象:对象表示为"{}"括起来的内容,数据结构为{key:value,key:value,...}的键值对的结构。
例如:{"name":"zhangsan","age":20}
数组:数组表示为中括号“[]”括起来的内容,数据结构为[value,value,value,...]或[{key:value,...},{key:value,...}]的单值结构。
例如:["北京","上海","广州"]
[{"name":"zhangsan","age":20},{"name":"lisi","age":21}]
JSON可以表示的数据
{
"Users":
[
{"name":"zhangsan","age":20},
{"name":"lisi","age":30}
]
}
JSON的三种解析方式
官方解析
GSON
FASTJSON
二、JSON的官方解析
1、把装配好的JavaBean转换成JSON数据格式
JSONObject jsonObj = new JSONObject(java对象);
使用jsonObj.toString()即可获取转换后的JSON字符串
2、把JSON转化成JavaBean对象
String json = "{'name':'张三','age':20}";
JSONObject jsonObj = new JSONObject(json);
String name = JSONObject.optString("name");
int age = JSONObject.optInt("age");
然后实例化Java对象,封装数据到属性中。
3、把集合转化成JSON字符串
JSONArray jsonArray = new JSONArray(集合对象);
使用jsonArray.toString()即可获取转换后的JSON字符串。
4、把数组形式的JSON字符串转换成集合对象
JSONArray jsonArray = new JSONArray(json字符串);
for(int i = 0; i<jsonArray.length();i++){
//使用jsonArray.optXXX()获取相应数据,并封装到集合中;
}
三、使用GSON(Google第三方包)解析JSON
先实例化GSON对象:
GSON gson = new GSON();
1、把Java对象转换成JSON
gson.toJson(Java对象);
2、把JSON转换成Java对象
gson.fromJson(jsonStr,目标类名称.class);
3、把集合类型的Java对象转换成JSON
gson.toJson(集合对象);
4、把JSON转换成集合类型的Java集合对象
gson.fromJson(jsonArrayStr,new TypeToken<目标集合类>(){}.getType());
四、FastJSON(阿里巴巴第三方包)解析JSON
1、把JavaBean转化成JSON
JSON.toJSONString(java对象);
2、把JSON转换成JavaBean
JSON.parseObject(json字符串,目标类.class);
3、把集合对象转换成JSON
JSON.toJSONString(集合对象);
4、把数组形式的JSON转换成集合对象
JSON.parseObject(jsonStr,new TypeReference<目标集合类>(){});
JSON的官方解析实例:
package offical;
public class Student {
private int id;
private String name;
private double score;
public Student() {
}
public Student(int id, String name, double score) {
super();
this.id = id;
this.name = name;
this.score = score;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", score=" + score + "]";
}
}
package offical;
import java.util.*;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class JSONUtil {
public static String javabeanToJSON() {//将java对象转换成对象格式的JSON字符串
Student stu = new Student(101,"张三",93.5);
JSONObject jsonObj = new JSONObject(stu);
return jsonObj.toString();
}
public static Student jsonToJavaBean() {//将json字符串转换成java对象
Student stu = null;
String json = "{'name':'李川','score':89,'id':102}";
try {
JSONObject jsonObj = new JSONObject(json);
int id = jsonObj.optInt("id");
String name = jsonObj.optString("name");
double score = jsonObj.optDouble("score");
stu = new Student(id,name,score);
} catch (JSONException e) {
e.printStackTrace();
}
return stu;
}
public static String listToJSON() {//将集合转换成数组格式的JSON字符串
List<Student> list = new ArrayList<Student>();
Collections.addAll(list,new Student(23,"乔丹",88.5),new Student(24,"科比",87.5),new Student(95,"华雄",67));
JSONArray jsonArray = new JSONArray(list);
return jsonArray.toString();
}
public static List<Student> jsonArrayToList(){//将数组格式的json字符串转换成集合
List<Student> list = new ArrayList<Student>();
String jsonArrayStr = "[{\"score\":65,\"name\":小白,\"id\":101},{\"score\":78,\"name\":大白,\"id\":102},{\"score\":95.5,\"name\":华化,\"id\":103}]";
try {
JSONArray jsonArray = new JSONArray(jsonArrayStr);
for(int i = 0;i < jsonArray.length();i++) {
JSONObject jsonObj =jsonArray.optJSONObject(i);//获取每个对象
int id = jsonObj.optInt("id");
String name = jsonObj.optString("name");
double score = jsonObj.optDouble("score");
Student stu = new Student(id,name,score);
list.add(stu);
}
} catch (JSONException e) {
e.printStackTrace();
}
return list;
}
}
package offical;
import java.util.List;
public class Test {
public static void main(String[] args) {
String jsonStr = JSONUtil.javabeanToJSON();
System.out.println("学生对象转换成的JSON字符串是:" + jsonStr + "\n");
Student stu = JSONUtil.jsonToJavaBean();
System.out.println("JSON字符串转换成java对象是:" + stu + "\n");
String jsonArrayStr = JSONUtil.listToJSON();
System.out.println("集合转换成数组格式的JSON字符串:" + "\n" + jsonArrayStr + "\n");
List<Student> list = JSONUtil.jsonArrayToList();
System.out.println("数组格式的JSON字符串转换成集合为:");
for(Student s : list) {
System.out.println(s);
}
}
}
运行结果:
使用GSON(Google第三方包)解析JSON的实例:
package gson;
public class Student {
private int id;
private String name;
private double score;
public Student() {
}
public Student(int id, String name, double score) {
super();
this.id = id;
this.name = name;
this.score = score;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", score=" + score + "]";
}
}
package gson;
import java.util.*;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonUtil {
private static Gson gson = new Gson();
public static String javabeanToJSON() {//使用GSON将Java对象转换成JSON
Student stu = new Student(101,"张三",89.5);
return gson.toJson(stu);
}
public static Student jsonToJavaBean() {
String jsonStr = "{'name':'李四','score':67,'id':102}";
return gson.fromJson(jsonStr,Student.class);
}
public static String listToJSON() {
List<Student> list = new ArrayList<Student>();
Collections.addAll(list,new Student(103,"王五",87),new Student(104,"香菱",99));
return gson.toJson(list);
}
public static List<Student> jsonToList(){
String jsonStr = "[{\"id\":20,\"name\":\"佐助\",\"score\":99},{\"id\":21,\"name\":\"鸣人\",\"score\":66}]";
return gson.fromJson(jsonStr,new TypeToken<List<Student>>() {}.getType() );
}
}
package gson;
import java.util.List;
public class TestGSON {
public static void main(String[] args) {
String jsonStr = GsonUtil.javabeanToJSON();
System.out.println("Java对象转换成JSON的是:" + jsonStr);
Student stu = GsonUtil.jsonToJavaBean();
System.out.println("JSON转换成Java对象的是:" + stu);
String jsonArrayStr = GsonUtil.listToJSON();
System.out.println("集合类型的Java对象转换成JSON的是:" + jsonArrayStr);
List<Student> list = GsonUtil.jsonToList();
System.out.println("JSON转换成集合类型的Java集合对象的是:");
for(Student s : list) {
System.out.println(s);
}
}
}
运行结果:
FastJSON(阿里巴巴第三方包)解析JSON实例:
package fastjson;
public class Student {
private int id;
private String name;
private double score;
public Student() {
}
public Student(int id, String name, double score) {
super();
this.id = id;
this.name = name;
this.score = score;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", score=" + score + "]";
}
}
package fastjson;
import java.util.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
public class FastJsonUtil {
public static String javabeanToJSON() {
Student stu = new Student(202,"小白",78);
return JSON.toJSONString(stu);
}
public static Student jsonToJavaBean() {
String jsonStr = "{\"id\":203,\"name\":\"张三\",\"score\":88}";
return JSON.parseObject(jsonStr,Student.class);
}
public static String listToJSON() {
List<Student> list = new ArrayList<Student>();
Collections.addAll(list,new Student(6,"小兰",89),new Student(7,"新一",99));
return JSON.toJSONString(list);
}
public static List<Student> jsonToList(){
String jsonStr = "[{\"id\":20,\"name\":\"郭靖\",\"score\":67},{\"id\":21,\"name\":\"黄蓉\",\"score\":77}]";
return JSON.parseObject(jsonStr,new TypeReference<List<Student>>() {});
}
}
package fastjson;
import java.util.*;
public class Test {
public static void main(String[] args) {
String jsonStr = FastJsonUtil.javabeanToJSON();
System.out.println("使用FastJSON将Java对象转换成JOSN:" + jsonStr);
Student stu = FastJsonUtil.jsonToJavaBean();
System.out.println("使用FastJSON将JSON转换成Java对象:" + stu);
String jsonArrayStr = FastJsonUtil.listToJSON();
System.out.println("使用FastJSON将集合转换成数组格式的JSON字符串:" + "\n" + jsonArrayStr);
List<Student> list = FastJsonUtil.jsonToList();
System.out.println("使用FastJSON将数组格式转换成集合:");
for(Student s : list) {
System.out.println(s);
}
}
}
运行结果: