? JSON現(xiàn)在常用來做前后端數(shù)據(jù)交互,兩個蝴蝶飛只是簡單的對JSON做一下講解和簡單使用。關于JSON,我還了解的遠遠不夠。由于本人經驗有限,嘴皮子不溜,所以學術性,概念性,底層性的知識點暫時不做介紹。文章中有錯誤之處,歡迎拍磚和指點。在此,特別向阿里團隊表示感謝,謝謝他們開發(fā)出了FastJSON這么好用的Jar包,并且免費開源出來。 兩個蝴蝶飛只是粗淺的談一下使用,非常抱歉,未能理解前輩們深邃的思想。
上一章簡單介紹了JSON簡介及前端簡單解析(一),如果沒有看過,請觀看上一章
一 FastJSON簡短介紹
JSON協(xié)議使用方便,越來越流行,JSON的處理器有很多,這里我介紹一下FastJson,FastJson是阿里的開源框架,被不少企業(yè)使用,是一個極其優(yōu)秀的Json框架。
FastJson的特點:
1.FastJson數(shù)度快,無論序列化和反序列化,都是當之無愧的fast
2.功能強大(支持普通JDK類包括任意Java Bean Class、Collection、Map、Date或enum)
3.零依賴(沒有依賴其它任何類庫)
首先要下載fastjson的jar包。github地址: https://github.com/alibaba/fastjson
這里只牽扯到后端方面,用Junit4框架進行測試
二 FastJSON三個類的簡單介紹
FastJSON包中有三個常用的對象,JSON,JSONObject,JSONArray三個對象。
二.一 JSON類
public abstract class JSON implements JSONStreamAware, JSONAware{
}
JSON類實現(xiàn)了JSONStreamAware和JSONAware接口。
JSONAware接口:
package com.alibaba.fastjson;
public abstract interface JSONAware
{
//轉換成JSON類型的字符串
public abstract String toJSONString();
}
JSONStreamAware接口:
public abstract interface JSONStreamAware //JSON+流+Aware 能力
{
// 向里面寫Appendable, 追加。 轉換成JSON字符串
public abstract void writeJSONString(Appendable paramAppendable)
throws IOException;
}
Appendable接口:
public interface Appendable {
//添加字符串
Appendable append(CharSequence csq) throws IOException;
//添加的字符串,可以截取 start,end
Appendable append(CharSequence csq, int start, int end) throws IOException;
//添加單個字符
Appendable append(char c) throws IOException;
}
二.二 JSONObject 類
public class JSONObject extends JSON
implements Map<String, Object>, Cloneable, Serializable, InvocationHandler{
}
JSONObject類繼承了JSON類,實現(xiàn)了Map接口,Cloneable(克隆接口),序列化(Serializable),InvocationHandler(調用處理器)
InvocationHandler.java
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable;
默認值為16。
所以JSONObject主要存儲的方式是以Map<Key,Value>的形式進行相應的存儲。存儲的是單值形式。
構造方法:
public JSONObject(Map<String, Object> map) {
this.map = map;
}
二.三 JSONArray類
public class JSONArray extends JSON
implements List<Object>, Cloneable, RandomAccess, Serializable{}
JSONArray類也繼承了JSON類, 實現(xiàn)了List接口,Cloneable克隆接口,Serializable 序列化接口,RandomAccess接口。
public interface RandomAccess {
}
實現(xiàn)了List接口,是以數(shù)組的形式進行相應的存儲。
構造方法:
public JSONArray(List<Object> list) {
this.list = list;
}
JSONObject和JSONArray均實現(xiàn)了JSON類,故一般都是用子類,即單值用JSONObject,集合用JSONArray。
三 JSONObject類的具體使用
三.一 轉換成普通字符串格式
轉換的格式為: var obj={“name”:“兩個蝴蝶飛”,“age”:24,“sex”:“男”};
代碼為:
/**
* 一個普通的字符串格式.
* var obj={"name":"兩個蝴蝶飛","age":24,"sex":"男"};
* 用JSONObject進行添加.
*/
@Test
public void testString1(){
//空構造
JSONObject json=new JSONObject();
//內部使用的是map結構,put放置值
json.put("id",1);
json.put("name","兩個蝴蝶飛");
json.put("age",24);
json.put("sex","男");
//轉換成json字符串. toJSONString()
String result=json.toJSONString();
System.out.println(result);
}
是字符串格式。
三.二 將JSON字符串進行解析取值
@Test
/*
* 解析JSON字符串
* {"name":"兩個蝴蝶飛","age":24,"sex":"男"};
*/
public void testToString1(){
String source="{'name':'兩個蝴蝶飛','age':24,'sex':'男'}";
//利用靜態(tài)方法parseObject(source),將要解析的資源放進去
JSONObject json=JSON.parseObject(source);
//取得數(shù)據(jù)時 可以取得具體的類型
System.out.println(json.getIntValue("age"));
System.out.println(json.getString("sex"));
System.out.println(json.getString("name"));
}
三.三 利用Map顯式放置值
@Test
/**
* 前面帶一個前綴. 用添加Map
* {"person":{"name":"兩個蝴蝶飛","age":24,"sex":"男"}}
*/
public void testString2(){
Map<String,Object> map=new HashMap<String,Object>();
map.put("name","岳建立");
map.put("age",24);
map.put("sex","男");
JSONObject json=new JSONObject();
json.put("person",map);
String result=json.toJSONString();
System.out.println(result);
//如果不要前綴,可以直接 {"name":"兩個蝴蝶飛","age":24,"sex":"男"}
//System.out.println(JSON.toJSONString(map));
}
三.四 取出Map中的值
@Test
public void testToString2(){
String source="{\"person\":{\"sex\":\"男\(zhòng)",\"name\":\"岳建立\",\"age\":24}}";
JSONObject json=JSON.parseObject(source);
System.out.println(json.getString("person"));
// {"name":"兩個蝴蝶飛","age":24,"sex":"男"}
//繼續(xù)取出
JSONObject json2=JSON.parseObject(json.getString("person"));
System.out.println(json2.getString("name"));
System.out.println(json2.getString("sex"));
System.out.println(json2.getIntValue("age"));
}
四 JSONArray的使用
如果屬性過多的話,那么就需要用一個User類進行相應的封裝了。即開始引入對象了。
引入相應的User的類
package com.fastjson.pojo;
/**
*author 作者 兩個蝴蝶飛
*version 創(chuàng)建時間 2018年9月16日下午3:42:37
*/
public class User {
private int id;
private String name;
private int age;
private String sex;
private String content;
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 getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
四.一 JSONArray 配置單個JavaBean類
- 前綴沒有用key值:
@Test
/**
* 將一個單對象轉換成JSON格式
* {"age":24,"content":"一個小小的程序員","id":1,"name":"兩個蝴蝶飛","sex":"男"}
*/
public void testUser1(){
User user=new User();
user.setId(1);
user.setName("兩個蝴蝶飛");
user.setSex("男");
user.setAge(24);
user.setContent("一個小小的程序員");
//直接用JSON.toJSONString(); toJSONString(user)
String result=JSON.toJSONString(user);
System.out.println(result);
}
- 前綴有key值
@Test
public void testUser1(){
User user=new User();
user.setId(1);
user.setName("兩個蝴蝶飛");
user.setSex("男");
user.setAge(24);
user.setContent("一個小小的程序員");
//用JSONObject
JSONObject json=new JSONObject();
json.put("user",user);
String result=json.toJSONString();
System.out.println(result);
}
- 取出沒有key值的Java Bean
@Test
public void testToUser4(){
String source="{\"age\":24,\"content\":\"一個小小的程序員\",\"id\":1,\"name\":\"兩個蝴蝶飛\",\"sex\":\"男\(zhòng)"}";
//直接轉換成對象
User user1=JSON.parseObject(source,User.class);
System.out.println(user1);
}
- 取出有key值的的Java Bean
@Test
public void testToUser1(){
String source="{\"user\":{\"age\":24,\"content\":\"一個小小的程序員\",\"id\":1,\"name\":\"兩個蝴蝶飛\",\"sex\":\"男\(zhòng)"}}";
//直接轉換成對象
//先取出后面的值
String result=JSON.parseObject(source).getString("user");
//繼承轉換
User user1=JSON.parseObject(result,User.class);
System.out.println(user1);
}
四.二 JSONArray 配置List 集合
@Test
//將一個對象數(shù)組集合添加到JSON中,用JSONArray
/*
{"persons":[{"age":0,"content":"小小的程序員而已0","id":0,"name":"兩個蝴蝶飛0","sex":"男"},
{"age":0,"content":"小小的程序員而已1","id":1,"name":"兩個蝴蝶飛1","sex":"女"},
{"age":0,"content":"小小的程序員而已2","id":2,"name":"兩個蝴蝶飛2","sex":"男"}]}
*/
public void testUser2(){
List<User> users = new ArrayList<User>();
for (int i = 0; i < 3; i++) {
User u = new User();
u.setId((i));
u.setName("兩個蝴蝶飛"+i);
u.setContent("小小的程序員而已"+i);
u.setSex(i % 2 == 0 ? "男" : "女");
users.add(u);
}
//String result=JSON.toJSONString(users);
JSONObject json=new JSONObject();
json.put("persons",users);
String result=json.toJSONString();
System.out.println(result);
}
解析List集合
@Test
public void testToUser2(){
String resource="{\"list\":[{\"id\":0,\"name\":\"兩個蝴蝶飛0\",\"sex\":\"男\(zhòng)"} {\"id\":1,\"name\":\"兩個蝴蝶飛1\",\"sex\":\"女\"},{\"id\":2,\"name\":\"兩個蝴蝶飛2\",\"sex\":\"男\(zhòng)"}]}";
String text=JSON.parseObject(resource).getString("list");
//現(xiàn)在,這已經是一個數(shù)組了.如何將數(shù)組進行解析呢? 用JSONArray
JSONArray arrays=JSON.parseArray(text);
List<User> allList=new ArrayList<User>();
for(int i=0;i<arrays.size();i++){
//用toJavaObject toJavaObject
User u=JSON.toJavaObject(arrays.getJSONObject(i),User.class);
allList.add(u);
}
for (User user : allList) {
System.out.println(user.getId()+","+user.getName());
}
}
這是常用的幾種解析方式。謝謝
解析成功,謝謝!!!文章來源:http://www.zghlxwxcb.cn/news/detail-664313.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-664313.html
到了這里,關于FastJson在Java后端方面解析使用(二)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!