如何将gson解析封装成arraylist

如何将gson解析封装成arraylist,第1张

最近一个项目中,需要将从服务器上获取到的JSON字符串转换为对象,大概研究了一下,发现在项目中很多地方都要用到,而且有的时候需要返回的是一个集合,所以写了个方法,留着自用。

public class JsonUtils {

/

将传入的json字符串按类模板解析成对象

@param json 需要解析的json字符串

@param cls 类模板

@return 解析好的对象

/

public static <T> T getObj(String json,Class<T> cls){

Gson gson = new Gson();

T bean = (T) gsonfromJson(json, cls);

return bean;

}

/

先创建一个people类,包含三个属性:name,sex,age

创建3个people类对象,并设置好对应属性,添加到list中

下载goolge的Gsonjar包,利用comgooglegsonGsontoj方法将list对象转换成json字符串,代码示例:

Gson gson = new Gson();

Stringjson =gsontoJson(list);

没用过gson,但根据它的API的JavaDoc,应该是用

gsontoJsonTree(list)

这样得到的不是直接一个String而是一棵树,里面元素是JsonElement,然后对相应的节点,把它转类型成JsonObject,然后用JsonObjectaddProperty(),爱加什么性质就加什么性质,最后用gsontoJson()把树转化为一个字符串。

两种方法,举个例子吧:

方法一:

var str = '[{"a":"1001","b":"book1"},{"a":"1002","b":"book2"}]';

var obj = JSONparse(str);

obj[0]b

方法二:

var str = '[{"a":"1001","b":"book1"},{"a":"1002","b":"book2"}]';

var obj = eval(str);

obj[1]b

网络框架用的Ok>

class MyObject1{

private String key;

private List<MyObject2> value;

get/set

}

class MyObject2{

private String key;

private String value;

get/set

}

Gson gson = gsonbcreate();

MyObject1 myObject1= gsonfromJson(jsonStr, MyObject1class);

另,去掉引号直接得到

{"key":"2","value":[{"key":"name","value":"sa3"},{"key":"age","value":"33"}]}

String[][] datas = {{"aaa","aa1","aa11"},{"bbb","bb1","bb11"},{"ccc","cc1","cc11"},

{"aaa","aa2","aa22"},{"bbb","bb2","bb22"},{"aaa","aa3","aa33"},

{"bbb","bb3","bb33"}};

Map<String , DetailModel> map = new HashMap<String , DetailModel>();

for (String[] strings : datas) {

DetailModel detail = new DetailModel();

detailsetPron(strings[0]);

List<MeanPhrase> li = new ArrayList<MeanPhrase>();

MeanPhrase mean = new MeanPhrase();

meansetMean(strings[1]);

meansetPhrase(strings[2]);

liadd(mean);

detailsetMpList(li);

//如果已存在相同的key,如aaa,则在key对应的对象的list中增加元素

if(mapcontainsKey(detailgetPron())){

mapget(detailgetPron())getMpList()addAll(li);

}else{//否则直接新增

mapput(detailgetPron(), detail);

}

}

//将map转为list

List<DetailModel> resultList = new ArrayList<DetailModel>(mapvalues());

for (DetailModel detailModel : resultList) {

Systemoutprintln(detailModel);

}

//输出map中的值以及分组结果记录数

Systemoutprintln("======================================");

Set<String> keySet = mapkeySet();

for (String string : keySet) {

Systemoutprintln(string+":"+mapget(string)getPron()+":"+mapget(string)getMpList()size());

}

控制台输出结果:

DetailModel [pron=aaa, mpList=[MeanPhrase [mean=aa1, phrase=aa11], MeanPhrase [mean=aa2, phrase=aa22], MeanPhrase [mean=aa3, phrase=aa33]]]

DetailModel [pron=ccc, mpList=[MeanPhrase [mean=cc1, phrase=cc11]]]

DetailModel [pron=bbb, mpList=[MeanPhrase [mean=bb1, phrase=bb11], MeanPhrase [mean=bb2, phrase=bb22], MeanPhrase [mean=bb3, phrase=bb33]]]

======================================

aaa:aaa:3

ccc:ccc:1

bbb:bbb:3

注意:DetailModel [pron=ccc, mpList=[MeanPhrase [mean=cc1, phrase=cc11]]]输出这样的形式是因为我实体类重写了toString()方法的原因,你那不重写的话输出的应该只是对象地址。

new GsonBuilder()excludeFieldsWithModifiers(ModifierPROTECTED),这句是忽略掉了修饰符是受保护protected的属性,对象中protected修饰符的字段将不会被转换,还是发现报declares multiple JSON fields named serialVersionUID,发现我对象中有private static final long serialVersionUID = 1L;,然后又忽略了所有static修饰符的字段就OK了

最终代码

以上就是关于如何将gson解析封装成arraylist全部的内容,包括:如何将gson解析封装成arraylist、java中如何将list按照键值的格式转换为josn、各位大神们谁有gson 详细的策略使用方法呢 gson.tojson()怎么向json中追加元素呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9333159.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存