浅谈Json在java中的使用

来源:互联网 发布:淘宝老客户怎么维护 编辑:程序博客网 时间:2024/05/01 06:44

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"]

3.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"}]
b.将各种类型的json类型字符串解析出来
//1.将JsonArray类型字符串转换成Bean或listimport 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
将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();方法执行结果:30123
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;    }  }
//测试代码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对应的课程是:英语

5.将基本的转化实现放到了一个工具类中。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;    }    }

6.差不多在项目中的使用可以实现了,这里我从开始不懂到自己敲出来,也是参考了很多博客前辈的知识讲解。在学习中进步。

1 0
原创粉丝点击