您的位置:首页 > Web前端 > JavaScript

利用Gson快捷解析Json数据

2015-03-23 14:51 211 查看
与服务器交互获取数据,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 实例稍候上传………
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: