利用Gson快捷解析Json数据

本文介绍如何在Android项目中利用Gson库快速解析JSON数据,并将其转化为对象和列表,最后填充到界面上。包括JSON数据的转换、实体类的封装、解析过程及示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

与服务器交互获取数据,Json格式是比较普遍和简单的一种形式,下面就来利用Gson来快捷的解析数据:
1):在android项目libs文件夹下导入json-jar.jar(详细导包不再啰嗦)
2):封装工具类JsonUtil.java

package com.xingfu.util;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
/**
 * © 2015  
 * 名称:JsonUtil.java 
 * 描述:json处理类.
 *
 * @author 孤狼
 * @version v1.0
 * @date:2015-01-17 下午01:52:13
 *
 */
public class JsonUtil {

    /**
     * 
     * 描述:将对象转化为json.
     * @param list
     * @return
     */
    public static String toJson(Object src) {
        String json = null;
        try {
            GsonBuilder gsonb = new GsonBuilder();
            Gson gson = gsonb.create();
            json = gson.toJson(src);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return json;
    }

    /**
     * 
     * 描述:将列表转化为json.
     * @param list
     * @return
     */
    public static String toJson(List<?> list) {
        String json = null;
        try {
            GsonBuilder gsonb = new GsonBuilder();
            Gson gson = gsonb.create();
            json = gson.toJson(list);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return json;
    }

    /**
     * 
     * 描述:将json转化为列表.
     * @param json
     * @param typeToken new TypeToken<ArrayList<?>>() {};
     * @return
     */
    public static List<?> fromJson(String json,TypeToken typeToken) {
        List<?> list = null;
        try {
            GsonBuilder gsonb = new GsonBuilder();
            Gson gson = gsonb.create();
            Type type = typeToken.getType();
            list = gson.fromJson(json,type);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     * 
     * 描述:将json转化为对象.
     * @param json
     * @param clazz
     * @return
     */
    public static Object fromJson(String json,Class clazz) {
        Object obj = null;
        try {
            GsonBuilder gsonb = new GsonBuilder();
            Gson gson = gsonb.create();
            obj = gson.fromJson(json,clazz);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }
}

3):使用实例:
一.解析成object对象
a》Json数据:json

{
    "user_id": 520,
    "user_name": "幸福",
    "user_age": 21,
    "user_logo": "http://www.xingfu.com//5456sdgdf5544.jpg",
    "user_class": "一(三)班",
    "user_school": "中国社会科学院"
}

b》封装实体类:UserBean.java与Json数据字段一致

public class UserBran {
    public int user_id;
    public String user_name;
    public int user_age;
    public String user_logo;
    public String user_class;
    public String user_school;
}

c》解析数据:
UserBean userBean=JsonUtil.fromJson(json.toString,UserBean.class);
d》填充数据:
tv.setText(userBean.user_name);等等
二..解析成List

[{
    "user_id": 520,
    "user_name": "幸福",
    "user_age": 21,
    "user_logo": "http://www.xingfu.com//5456sdgdf5544.jpg",
    "user_class": "一(三)班",
    "user_school": "中国社会科学院"
},
{
    "user_id": 220,
    "user_name": "幸运",
    "user_age": 25,
    "user_logo": "http://www.xingfu.com//gdfgdgsdgdf5544.jpg",
    "user_class": "一(二)班",
    "user_school": "中国社会科学院"
},{
    "user_id": 440,
    "user_name": "天真",
    "user_age": 41,
    "user_logo": "http://www.xingfu.com//fg56sdgdf5544.jpg",
    "user_class": "一(四)班",
    "user_school": "中国社会科学院"
}]

b》解析数据:

TypeToken typeToken=new TypeToken<ArrayList<UserBean>>() {};
ArrayList<UserBean> list=JsonUtil.fromJson(json.toString,typeToken);

c》填充数据:
listView.setAdapter(new CommunAdapter(this,list));等等
4):复杂数据的解析
a》Json嵌套的数据,json

{
    "user_id": 520,
    "user_name": "幸福",
    "user_age": 21,
    "user_logo": "http://www.xingfu.com//5456sdgdf5544.jpg",
    "user_class": "一(三)班",
    "user_school": "中国社会科学院",
     "data": {
        "number": 200,
        "love_gril": "丽丽"
    }
}

b》:只需把实体类封装成:

public class UserBran {
    public int user_id;
    public String user_name;
    public int user_age;
    public String user_logo;
    public String user_class;
    public String user_school;
    public MoreData data;
    public class MoreData {
        public int number;
        public String love_gril;
    }
}

c》解析数据:

UserBean userBean=JsonUtil.fromJson(json.toString,UserBean.class);

这种解析的方式比传统的解析方便简洁:
总结步骤:
1.把获取的Json数据转化为String类型
2.封装实体类(所有用到的字段和Json中字段一致)
3.调用工具类,解析数据
4.填充数据到界面

demo 实例稍候上传………

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值