最近一个项目中,需要将从服务器上获取到的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中追加元素呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)