欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

json解析和自定义json之fastjson基础

程序员文章站 2022-06-17 09:06:07
...

最近使用fastjson,写了几个关于json解析和自定义json的例子,下面贴出来

一、准备工作

使用Maven,在pom.xml文件加入以下依赖

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.1.41</version>
</dependency>

手写一个json字符串

{
"id": "1",
"name": "天空",
"sons": [{
"sonid": "2",
"sonname": "月亮"
}, {
"sonid": "3",
"sonname": "星星"
}]
}

可在此网站校验json格式是否正确 https://www.bejson.com/

可在此网站压缩json字符串 https://www.bejson.com/zhuanyi/

压缩好的字符串在记事本中将所有"替换成\" (如图),即可放入定义json字符串代码中

json解析和自定义json之fastjson基础

二、json解析

json解析有两种方式 见下面代码

1.转换成jsonobject对象根据名字取

2.将json转化为对象(主流)

public class Jsondome {
	//定义一个json字符串
	static String json="{\"id\":\"1\",\"name\":\"天空\",\"sons\":[{\"sonid\":\"2\",\"sonname\":\"月亮\"},{\"sonid\":\"3\",\"sonname\":\"星星\"}]}";
	public static void main(String[] args) {
		//1.先转换成jsonobject对象
		JSONObject JsonObject = new JSONObject().parseObject(json);
		String id = JsonObject.getString("id");
		String name = JsonObject.getString("name");
		System.out.println("id:"+id+"===="+"name:"+name);
		JSONArray JSONArray=JsonObject.getJSONArray("sons");
		for (int i = 0; i < JSONArray.size(); i++) {
			JSONObject object=JSONArray.getJSONObject(i);
			String sonid = object.getString("id");
			String sonname = object.getString("name");
			System.out.println("sonid"+sonid+"===="+"sonname"+sonname);
		}
		
		//2.json转换对象
		User user = new JSONObject().parseObject(json, User.class);
		System.out.println("user:"+user.toString());
		
	}
}
实体(必须和jsondome2同包原因详见注意)
class Son{
	private String sonid;
	private String sonname;
	public String getSonid() {
		return sonid;
	}
	public void setSonid(String sonid) {
		this.sonid = sonid;
	}
	public String getSonname() {
		return sonname;
	}
	public void setSonname(String sonname) {
		this.sonname = sonname;
	}
	@Override
	public String toString() {
		return "son [sonid=" + sonid + ", sonname=" + sonname + "]";
	}
	


	
	
}
public class User {

	private String id;
	private String name;
	private List<Son>sons;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<Son> getSons() {
		return sons;
	}
	public void setSons(List<Son> sons) {
		this.sons = sons;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", sons=" + sons + "]";
	}
	
	
}

三、自定义json

也是两种方法(见代码)

1.直接定义

2.通过实体类封装

public class Jsondome2 {

	public static void main(String[] args) {
		//自定义json字符串
//		JSONObject r=new JSONObject();
//		r.put("id","1");
//		r.put("name","天空");
//		JSONArray jsonArray = new JSONArray();
//		JSONObject object1=new JSONObject();
//		object1.put("sonid","2");
//		object1.put("sonname","月亮");
//		jsonArray.add(object1);
//		JSONObject object2=new JSONObject();
//		object2.put("sonid","3");
//		object2.put("sonname","星星");
//		jsonArray.add(object2);
//		r.put("sons",jsonArray);
//		System.out.println(r.toJSONString());
		//使用实体类封装json
		User user=new User();
		user.setId("1");
		user.setName("天空");
		List<Son> ListSon=new ArrayList<Son>();
		Son son1 = new Son();
		son1.setSonid("2");
		son1.setSonname("月亮");
		Son son2=new Son();
		son2.setSonid("3");
		son2.setSonname("星星");
		ListSon.add(son1);
		ListSon.add(son2);
		user.setSons(ListSon);
		System.out.println(new JSONObject().toJSONString(user));
	}
}

四、注意

json字符串中的数组,实体类我使用的是内部类,未加修饰符所以必须同包


json解析和自定义json之fastjson基础

public:可以被所有其他类所访问

private:只能被自己访问和修改

protected:自身、子类及同一个包中类可以访问

default:同一包中的类可以访问,声明时没有加修饰符,认为是friendly。





相关标签: fastjson