1.一般我们在进行客户端和服务端交换数据的时候,会使用Json来进行数据的传输,即转换成字符串类型的json数据来进行数据的交换。
2.Json类型的数据一般是 JSONObject(对象),JSONArray(数组)。一般来说二组的区别在于,对象是无序的,而数组是有序的,看具体需求选择使用。
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 { //定义一个json对象 JSONObject jo = new JSONObject(); jo.put("id", "1"); jo.put("name", "yang"); jo.put("age", "13"); //定义一个Json数组 JSONArray ja = new JSONArray(); ja.add(0, "yang"); ja.add(1,"li"); ja.add(2, "zhang"); System.out.println("json对象的格式:"+jo); System.out.println("json数组的格式:"+ja); //使用类自带的方法来转换成String类型 String str_ = jo.toJSONString(); String strs_ = ja.toJSONString(); System.out.println("json对象-->String"+str_); System.out.println("json数组-->String"+strs_); } } 执行结果: json对象的格式:{"id":"1","age":"13","name":"yang"} json数组的格式:["yang","li","zhang"] json对象-->String{"id":"1","age":"13","name":"yang"} json数组-->String["yang","li","zhang"] 1234567891011121314151617181920212223242526272829303132333435363738394041 12345678910111213141516171819202122232425262728293031323334353637383940413.Json在数据传输中的使用
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) { //创建一个User对象(name,age,id) User user = new User(); user.setAge(22); user.setName("张三"); user.setId(33); List li = new ArrayList(); //创建一个Map,放入三组值 Map<String, Object> hashMap = new HashMap<String, Object>(); hashMap.put("name", "ZHULI"); hashMap.put("age", "30"); hashMap.put("id", "4"); //向List中放入数据 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结果:"+stra); System.out.println("Map-->String结果:"+strb); System.out.println("List-->String结果"+strc); } } 执行结果: Bean-->String结果:{"name":"张三","age":22,"id":33} Map-->String结果:{"id":"4","age":"30","name":"ZHULI"} List-->String结果["123","444,{"id":"4","age":"30","name":"ZHULI"}] 12345678910111213141516171819202122232425262728293031323334353637383940 12345678910111213141516171819202122232425262728293031323334353637383940 b.将各种类型的json类型字符串解析出来 //1.将JsonArray类型字符串转换成Bean或list import java.util.List; import Socket.User; public class Test02 { public static void main(String[] args) { //定义一个jsonArrayString String json = "[{'name':'yang','id':'1','age':'18'}," + "{'name':'zhang','id':'2','age':'13'}]"; //jsonString转list,User类自己创建,三个属性 List<User> 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("学生的姓名是:"+name+" "+"ID是:"+id+" "+"年龄是:"+age); } } } 执行结果: 学生的姓名是:yang ID是:1 年龄是:18 学生的姓名是:zhang ID是:2 年龄是:13 123456789101112131415161718192021222324252627 123456789101112131415161718192021222324252627 将JsonArray类型字符串转换成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类型的数据,使用GsonToListMap();方法 执行结果: 30 123 12345678910111213141516171819 12345678910111213141516171819 c.实用性比较高的,复杂的数据转化成Bean进行操作 //先贴出学生类 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<String> books = new ArrayList<String>(); private HashMap<String, String> booksMap = new HashMap<String, String>(); //获取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<String> getBooks() { return books; } public void setBooks(List<String> books) { this.books = books; } public HashMap<String, String> getBooksMap() { return booksMap; } public void setBooksMap(HashMap<String, String> booksMap) { this.booksMap = booksMap; } } 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 //测试代码 package TestJson; public class Test05 { public static void main(String[] args) { //定义一个包含list,map类型的字符串 String json = "{'books':['数学','语文','英语','物理','化学','生物'],'booksMap':{'3':'英语','2':'语文','1':'数学','6':'生物','5':'化学','4':'物理'},'email':'965266509@qq.com','nickName':'小明','id':'1','age':'22'}"; //转化成Bean Student su = GsonUtil.GsonToBean(json, Student.class); System.out.println("学生的姓名是:"+su.getNickName()); System.out.println("学生学习的第一门课:"+su.getBooks().get(0)); System.out.println("序号3课程是:"+su.getBooksMap().get("3")); } } 执行结果: 学生的姓名是:小明 学生学习的第一门课:数学 序号3对应的课程是:英语 12345678910111213141516171819 123456789101112131415161718195.将基本的转化实现放到了一个工具类中。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.对象实体类,list,map,等转化成----->jsonString(进行数据传递) * 2.jsonString转化成----->对象实体类,list,map(解析返回的数据) * 3.我使用的是gson-2.2.2.jar * @author yes * */ public class GsonUtil { private static Gson gson = null; static { if (gson == null) { gson = new Gson(); } } /** * 将object对象转成json字符串(jsonString) * boject 可以是List,也可以是Bean(对象类型) * @param object */ public static String GsonString(Object object) { String gsonString = null; if (gson != null) { gsonString = gson.toJson(object); } return gsonString; } /**入参是json对象 * 将gsonObjectString转成泛型bean(实体类) * @param gsonString */ public static <T> T GsonToBean(String gsonString, Class<T> cls) { T t = null; if (gson != null) { t = gson.fromJson(gsonString, cls); } return t; } /** * 这里的入参是json数组类型的字符串 * jsonArrayString转成list */ public static <T> List<T> jsonArrayToList(String json, Class<T> cls) { Gson gson = new Gson(); List<T> list = new ArrayList<T>(); JsonArray array = new JsonParser().parse(json).getAsJsonArray(); for(final JsonElement elem : array){ list.add(gson.fromJson(elem, cls)); } return list; } /** * List对泛型没有要求 * jsonString转成list中有map的 */ public static <T> List<Map<String, T>> GsonToListMap(String gsonString) { List list = null; if (gson != null) { list = gson.fromJson(gsonString, new TypeToken<List>() { }.getType()); } return list; } /** * 要求List中全部是Map * jsonString转成list中有map的 */ public static <T> List<Map<String, T>> GsonToListMaps(String gsonString) { List<Map<String, T>> list = null; if (gson != null) { list = gson.fromJson(gsonString, new TypeToken<List<Map<String, T>>>() { }.getType()); } return list; } /** * jsonString转成map的 */ public static <T> Map<String, T> GsonToMaps(String gsonString) { Map<String, T> map = null; if (gson != null) { map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>() { }.getType()); } return map; } /** * map转jsonString,指定了Map类型 */ public static String MapToJson(Map<String,Object> map){ String str = null; if(gson != null){ str = gson.toJson(map); } return str; } } 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231246.差不多在项目中的使用可以实现了,这里我从开始不懂到自己敲出来,也是参考了很多博客前辈的知识讲解。在学习中进步。