1.一般我們?cè)谶M(jìn)行客戶端和服務(wù)端交換數(shù)據(jù)的時(shí)候,會(huì)使用Json來進(jìn)行數(shù)據(jù)的傳輸,即轉(zhuǎn)換成字符串類型的json數(shù)據(jù)來進(jìn)行數(shù)據(jù)的交換。
2.Json類型的數(shù)據(jù)一般是 JSONObject(對(duì)象),JSONArray(數(shù)組)。一般來說二組的區(qū)別在于,對(duì)象是無序的,而數(shù)組是有序的,看具體需求選擇使用。
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
/**
* 使用的是json-lib-2.4.jar
* @author yes
*
*/
public class TestJson {
public static void main(String[] args) throws Exception {
//定義一個(gè)json對(duì)象
JSONObject jo = new JSONObject();
jo.put("id", "1");
jo.put("name", "yang");
jo.put("age", "13");
//定義一個(gè)Json數(shù)組
JSONArray ja = new JSONArray();
ja.add(0, "yang");
ja.add(1,"li");
ja.add(2, "zhang");
System.out.println("json對(duì)象的格式:"+jo);
System.out.println("json數(shù)組的格式:"+ja);
//使用類自帶的方法來轉(zhuǎn)換成String類型
String str_ = jo.toJSONString();
String strs_ = ja.toJSONString();
System.out.println("json對(duì)象-->String"+str_);
System.out.println("json數(shù)組-->String"+strs_);
}
}
執(zhí)行結(jié)果:
json對(duì)象的格式:{"id":"1","age":"13","name":"yang"}
json數(shù)組的格式:["yang","li","zhang"]
json對(duì)象-->String{"id":"1","age":"13","name":"yang"}
json數(shù)組-->String["yang","li","zhang"]
123456789101112131415161718192021222324252627282930313233343536373839404112345678910111213141516171819202122232425262728293031323334353637383940413.Json在數(shù)據(jù)傳輸中的使用
a.將各種類型裝換成Json類型字符串
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test03 {
public static void main(String[] args) {
//創(chuàng)建一個(gè)User對(duì)象(name,age,id)
User user = new User();
user.setAge(22);
user.setName("張三");
user.setId(33);
List li = new ArrayList();
//創(chuàng)建一個(gè)Map,放入三組值
Map hashMap = new HashMap();
hashMap.put("name", "ZHULI");
hashMap.put("age", "30");
hashMap.put("id", "4");
//向List中放入數(shù)據(jù)
li.add(0, "123");
li.add(1,"444");
li.add(hashMap);
//將List,Map,Bean---->json類型字符串
String stra = GsonUtil.GsonString(user);
String strb = GsonUtil.GsonString(hashMap);
String strc = GsonUtil.GsonString(li);
System.out.println("Bean-->String結(jié)果:"+stra);
System.out.println("Map-->String結(jié)果:"+strb);
System.out.println("List-->String結(jié)果"+strc);
}
}
執(zhí)行結(jié)果:
Bean-->String結(jié)果:{"name":"張三","age":22,"id":33}
Map-->String結(jié)果:{"id":"4","age":"30","name":"ZHULI"}
List-->String結(jié)果["123","444,{"id":"4","age":"30","name":"ZHULI"}]
1234567891011121314151617181920212223242526272829303132333435363738394012345678910111213141516171819202122232425262728293031323334353637383940b.將各種類型的json類型字符串解析出來
//1.將JsonArray類型字符串轉(zhuǎn)換成Bean或list
import java.util.List;
import Socket.User;
public class Test02 {
public static void main(String[] args) {
//定義一個(gè)jsonArrayString
String json = "[{'name':'yang','id':'1','age':'18'},"
+ "{'name':'zhang','id':'2','age':'13'}]";
//jsonString轉(zhuǎn)list,User類自己創(chuàng)建,三個(gè)屬性
List li = GsonUtil.jsonArrayToList(json,User.class);
for(User user : li){
String name = user.getName();
Integer id = user.getId();
Integer age = user.getAge();
System.out.println("學(xué)生的姓名是:"+name+" "+"ID是:"+id+" "+"年齡是:"+age);
}
}
}
執(zhí)行結(jié)果:
學(xué)生的姓名是:yang ID是:1 年齡是:18
學(xué)生的姓名是:zhang ID是:2 年齡是:13
123456789101112131415161718192021222324252627123456789101112131415161718192021222324252627將JsonArray類型字符串轉(zhuǎn)換成List中包含map的
import java.util.List;
import java.util.Map;
public class Test05 {
public static void main(String[] args) {
String json = "['123','444',{'id':'4','age':'30','name':'ZHULI'}]";
//list中含有Map但不全是Map
List li = GsonUtil.GsonToListMap(json);
Map m =(Map) li.get(2);
System.out.println(m.get("age"));
}
}
//如果list中全部是Map類型的數(shù)據(jù),使用GsonToListMap();方法
執(zhí)行結(jié)果:
30
123
1234567891011121314151617181912345678910111213141516171819c.實(shí)用性比較高的,復(fù)雜的數(shù)據(jù)轉(zhuǎn)化成Bean進(jìn)行操作
//先貼出學(xué)生類
package TestJson;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Student {
private String id;
private String nickName;
private String email;
private String age;
private List books = new ArrayList();
private HashMap booksMap = new HashMap();
//獲取set,get方法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public List getBooks() {
return books;
}
public void setBooks(List books) {
this.books = books;
}
public HashMap getBooksMap() {
return booksMap;
}
public void setBooksMap(HashMap booksMap) {
this.booksMap = booksMap;
}
}
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152531234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253//測(cè)試代碼
package TestJson;
public class Test05 {
public static void main(String[] args) {
//定義一個(gè)包含list,map類型的字符串
String json = "{'books':['數(shù)學(xué)','語(yǔ)文','英語(yǔ)','物理','化學(xué)','生物'],'booksMap':{'3':'英語(yǔ)','2':'語(yǔ)文','1':'數(shù)學(xué)','6':'生物','5':'化學(xué)','4':'物理'},'email':'965266509@qq.com','nickName':'小明','id':'1','age':'22'}";
//轉(zhuǎn)化成Bean
Student su = GsonUtil.GsonToBean(json, Student.class);
System.out.println("學(xué)生的姓名是:"+su.getNickName());
System.out.println("學(xué)生學(xué)習(xí)的第一門課:"+su.getBooks().get(0));
System.out.println("序號(hào)3課程是:"+su.getBooksMap().get("3"));
}
}
執(zhí)行結(jié)果:
學(xué)生的姓名是:小明
學(xué)生學(xué)習(xí)的第一門課:數(shù)學(xué)
序號(hào)3對(duì)應(yīng)的課程是:英語(yǔ)
12345678910111213141516171819123456789101112131415161718195.將基本的轉(zhuǎn)化實(shí)現(xiàn)放到了一個(gè)工具類中。GsonUtil.Java
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
/**
* 使用gson來操作Json
* 1.對(duì)象實(shí)體類,list,map,等轉(zhuǎn)化成----->jsonString(進(jìn)行數(shù)據(jù)傳遞)
* 2.jsonString轉(zhuǎn)化成----->對(duì)象實(shí)體類,list,map(解析返回的數(shù)據(jù))
* 3.我使用的是gson-2.2.2.jar
* @author yes
*
*/
public class GsonUtil {
private static Gson gson = null;
static {
if (gson == null) {
gson = new Gson();
}
}
/**
* 將object對(duì)象轉(zhuǎn)成json字符串(jsonString)
* boject 可以是List,也可以是Bean(對(duì)象類型)
* @param object
*/
public static String GsonString(Object object) {
String gsonString = null;
if (gson != null) {
gsonString = gson.toJson(object);
}
return gsonString;
}
/**入?yún)⑹莏son對(duì)象
* 將gsonObjectString轉(zhuǎn)成泛型bean(實(shí)體類)
* @param gsonString
*/
public static T GsonToBean(String gsonString, Class cls) {
T t = null;
if (gson != null) {
t = gson.fromJson(gsonString, cls);
}
return t;
}
/**
* 這里的入?yún)⑹莏son數(shù)組類型的字符串
* jsonArrayString轉(zhuǎn)成list
*/
public static List jsonArrayToList(String json, Class cls) {
Gson gson = new Gson();
List list = new ArrayList();
JsonArray array = new JsonParser().parse(json).getAsJsonArray();
for(final JsonElement elem : array){
list.add(gson.fromJson(elem, cls));
}
return list;
}
/**
* List對(duì)泛型沒有要求
* jsonString轉(zhuǎn)成list中有map的
*/
public static List
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231246.差不多在項(xiàng)目中的使用可以實(shí)現(xiàn)了,這里我從開始不懂到自己敲出來,也是參考了很多博客前輩的知識(shí)講解。在學(xué)習(xí)中進(jìn)步。