Java基础之JSON解析

本文介绍了JSON数据格式的基础知识及三种不同的JSON解析方法:官方解析、GSON和FastJSON。展示了如何将Java对象、集合转换为JSON字符串,以及如何从JSON字符串中提取数据并转换回Java对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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);
		}
	}

}

运行结果:





























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值