Gson解析json对象,json数组

String jsonStr 为

{    "error": 0,    "msg": "成功",    "result": {        "tags": [{            "id": "234",            "name": "APP用户标签一"        }, {            "id": "32",            "name": "简印客户标签二"        }]    }}

android studio build里面的dependencies加入compile 'com.google.code.gson:gson:2.2.4'

三个对象类:public class TagBean {   

private int error;   

private String msg;  

private TagResult result;  

public int getError() {      

return error; 

  }   

public void setError(int error) {       

this.error = error;  

}  

public String getMsg(){      

return msg;  

}   

public void setMsg(String msg) {      

this.msg = msg;   

}   

public TagResult getResult() {    

  return result;  

}   

public void setResult(TagResult result) {  

    this.result = result;    }}

public class TagResult {  

private List<UserTags> tags;  

public List<UserTags> getTags() {        return tags;    }   

public void setTags(List<UserTags> tag) {        this.tags = tag;    }}

public class UserTags {   

private String id;   

private String name;   

public String getId() {        return id;    }  

public void setId(String id) {        this.id = id;    }   

public String getName() {        return name;    }  

public void setName(String name) {        this.name = name;    }}

解析的代码:

Gson mg = new Gson();      

TagBean mt = mg.fromJson(jsonStr, TagBean.class);       

TagResult tr = mt.getResult();      

List<UserTags> list = tr.getTags();       

StringBuilder sb = new StringBuilder();     

  if (list != null) {

          int size = list.size();          

        if (size > 0) {              

             for (int i = 0; i < size; i++) {                  

                 sb.append(list.get(i).getId());                   

                 sb.append(":");                   

                 sb.append(list.get(i).getName());                  

                 sb.append("\n");                }            }        }

        tv1.setText(list.size() + "\n" + sb.toString());

工具类:

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

import java.util.ArrayList;
import java.util.List;

public class GsonUtil {

    private static Gson mGson = new Gson();

    /**
     * 将json字符串转化成实体对象
     *
     * @param json
     * @param classOfT
     * @return
     */
    public static Object stringToObject(String json, Class classOfT) {
        return mGson.fromJson(json, classOfT);
    }

    /**
     * 将对象准换为json字符串 或者 把list 转化成json
     * 例如:Friends mFriends = (Friends) GsonUtil.stringToObject(result, Friends.class);
     *
     * @param object
     * @param <T>
     * @return
     */
    public static <T> String objectToString(T object) {
        return mGson.toJson(object);
    }

    /**
     * 把json 字符串转化成list
     * // List<bean类名> list = GsonUtil.stringToList(result, bean类名.class);
     *
     * @param json
     * @param cls
     * @param <T>
     * @return
     */
    public static <T> List<T> stringToList(String json, Class<T> cls) {
        Gson gson = new Gson();
        List<T> list = new ArrayList<>();
        JsonArray array = new JsonParser().parse(json).getAsJsonArray();
        for (final JsonElement elem : array) {
            list.add(gson.fromJson(elem, cls));
        }
        return list;
    }
}

要是混淆代码的时候,记得要在混淆的文件里面,添加:

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.m.myapp.bean.** { *; }  ##这里需要改成解析到哪个  javabean
-keep class com.m.myapp.ta.bean.** { *; }

##---------------End: proguard configuration for Gson  ----------

一定要注意,不然会出错,解析失败。



阅读更多
文章标签: json gson
个人分类: android
上一篇java 判断邮箱和手机
下一篇android recyclerview的使用,添加分割线,点击,长按事件
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭