解析Json数据:使用Gson进行解析json数据<二>

1、什么是Gson?
关于什么是Gson,谷歌给出了下面的解释:
Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Gson is an open-source project hosted at http://code.google.com/p/google-gson.

翻译是:Gson是一个java类库可以将java对象转换成json表现出来。他也可以将json字符串转换成等同对性爱那个。Gson是一个开源工程,地址在 http://code.google.com/p/google-gson

2、使用Gson的好处
1、Provide easy to use mechanisms like toString() and constructor (factory method) to convert Java to JSON and vice-versa
2、Allow pre-existing unmodifiable objects to be converted to and from JSON
3、Allow custom representations for objects
4、Support arbitrarily complex object
5、Generate compact and readability JSON output

翻译如下:
1、提供易于使用的机制,像toString()和构造器(工厂方法)去转换java对对象成json,反之亦然。
2、允许已经存在无法改变的对象去转换成json或者是将json转换成该对象
3、允许自定义表示对象
4、支持任意复杂的对象
5、生成JSON输出紧凑和可读性

3、使用Gson解析简单类型的数据

{"persons":{"age":10,"id":1,"name":"jack"}}

首先是定义一个Person类

public class Person implements Serializable {
    private int id;
    private String name;
    private int age;

    public Person(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Person() {
    }

使用Gson进行解析:要注意的是Gson是直接解析json数据中的内容体,所以我们需要将json数据的数组名给消除掉,可以直接用String中的方法截取子字符串。

String data = jsonString .substring(jsonString .indexOf(":") + 1, jsonString .lastIndexOf("}"));

使用泛型方法,可以方便转换成多种bean类型

    /**
     * @param <T> 传入的类型
     * @param jsonString json字符串
     * @param cls 传入的类型的.class
     * @return
     */
public static <T> T getPerson(String jsonString, Class<T> cls) {
        T t = null;
        try {
            Gson gson = new Gson();
            t = gson.fromJson(jsonString, cls);
        } catch (Exception e) {
            // TODO: handle exception
        }
        return t;
    }
//截取字符串的方法
public String subJsonString(String jsonString) {
        jsonString = jsonString.substring(jsonString.indexOf(":") + 1,
                jsonString.lastIndexOf("}"));
        return jsonString;
    }

调用也很简单,直接调用就可以了:

String jsonString = "{\"persons\":{\"age\":10,\"id\":1,\"name\":\"jack\"}}";

jsonString = subJsonString(jsonString);
Person person = getPerson(sTotalString, Person.class);

这样就解析完成了,一般我们获得的数据不一定是标准的json数据,需要我们自己进行字符串的裁剪。

解析包含多条数据的Json字符串

{"person":[{"age":14,"id":0,"name":"jack0"},{"age":14,"id":1,"name":"jack1"},{"age":5,"id":2,"name":"jack2"},{"age":4,"id":3,"name":"jack3"},{"age":18,"id":4,"name":"jack4"},{"age":6,"id":5,"name":"jack5"},{"age":19,"id":6,"name":"jack6"},{"age":18,"id":7,"name":"jack7"},{"age":9,"id":8,"name":"jack8"},{"age":25,"id":9,"name":"jack9"}]}

解析方式:

private static <T> List<T> getPersons(String jsonString, Class<T> cls){
        List<T> list = new ArrayList<>();
        Gson gson = new Gson();
        //获取传入数据的类型,根据<List<T>>中的类型判断返回值类型
        Type type = new TypeToken<List<T>>(){}.getType();
        list = gson.fromJson(jsonString, type);
        return list;
    }

解析成Map集合的方式也十分的简单,只需要将类型换成Map

private static Map<String,Object> getPersonsToMap(String jsonString){
        Map<String,Object> map = new HashMap<>();
        Gson gson = new Gson();
        //获取传入数据的类型,判断返回值类型
        Type type = new TypeToken<Map<String,Object>>(){}.getType();
        map = gson.fromJson(jsonString, type);
        return map;
    }

至于解析复杂的数据类型,只需要将他的Gson类型表示出来,使用上述的方法都可以解决!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值