Json与List的相互转换
前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到教程。
問(wèn)題由來(lái):
最近由于做一個(gè)項(xiàng)目,項(xiàng)目的一個(gè)功能就是根據(jù)Listview的內(nèi)容生成一個(gè)二維碼,然后掃描二維碼獲取list,再重新顯示listview。
核心就是:?
list—->生成二維碼——>獲取二維碼—–>獲取list
生成二維碼的方法:
http://blog.csdn.net/demonliuhui/article/details/52948696
由于生成二維碼的參數(shù)類型是String,不能是list。如果將list的內(nèi)容get出來(lái)拼成String生成二維碼。掃描二維碼后如何處理String轉(zhuǎn)為list又是一個(gè)棘手的問(wèn)題。因此我想到了將list的內(nèi)容封裝成json,因?yàn)閖son本身就是String類型,所以生成二維碼就會(huì)很簡(jiǎn)單,進(jìn)而對(duì)json進(jìn)行解析生成list。整個(gè)問(wèn)題就變成了一個(gè)很easy的問(wèn)題:?
list—->json——->生成二維碼——>掃描二維碼獲取json——>解析json——->list
于是自己寫(xiě)了一個(gè)代碼list轉(zhuǎn)換為json:
/***數(shù)據(jù)封裝成json** @param items 物料入庫(kù)數(shù)據(jù)* @return json* @throws JSONException*/ public static String GoodIn2Json(List<GoodInfo> items) throws JSONException {if (items == null) return "";JSONArray array = new JSONArray();JSONObject jsonObject = null;GoodInfo info = null;for (int i = 0; i < items.size(); i++) {info = items.get(i);jsonObject = new JSONObject();jsonObject.put(Api.COLORID, info.getColorId());jsonObject.put(Api.STOCK, info.getStock());array.put(jsonObject);}return array.toString();}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 216
- /*** 將json數(shù)組解析出來(lái),生成自定義數(shù)據(jù)的數(shù)組* @param data 包含用戶自定義數(shù)據(jù)的json* @return 自定義信息的數(shù)據(jù)* @throws JSONException*/public static List<MoreInfo> Json2UserDefine(String data) throws JSONException {List<MoreInfo> items = new ArrayList<>();if (data.equals("")) return items;JSONArray array = new JSONArray(data);JSONObject object = null;MoreInfo item = null;for (int i = 0; i < array.length(); i++) {object = array.getJSONObject(i);String key = object.getString(Api.KEY);String value = object.getString(Api.VALUE);item = new MoreInfo(key, value);items.add(item);}return items;}
7代碼很簡(jiǎn)單,就不詳解。這樣貌似就大功告成了,但是:?這樣只能處理list里面只有一組數(shù)據(jù)的情況。如果循環(huán)封裝成json,得到的格式就是:
[{"name":"name0","age":0}][{"name":"name1","age":5}][{"name":"name2","age":10}]- 1
而不是:
[{"name":"name0","age":0}{"name":"name3","age":15},{"name":"name4","age":20}]- 1
很明顯第一種格式并不是我想要的json格式,還要據(jù)循循環(huán)遍歷json解析,想想就讓人苦惱。 list里面參數(shù)少還好,如果有很多的話,豈不是要累死。
于是我百度了一下:list轉(zhuǎn)換為json,不查不知道,一查原來(lái)還有json轉(zhuǎn)換為list。狂吐兩口老血!!!?
不過(guò)也算是學(xué)到了。?
1.使用谷歌的Gson.jar。?
2.使用阿里的fastJson.jar?
已經(jīng)打包好了,地址:?
http://download.csdn.net/detail/demonliuhui/9666072簡(jiǎn)單的令人發(fā)指:
谷歌的Gson.jar
//list轉(zhuǎn)換為json Gson gson = new Gson(); List<Person> persons = new ArrayList<Person>(); String str = gson.toJson(persons); //json轉(zhuǎn)換為list Gson gson = new Gson(); List<Person> persons = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType()); 阿里的fastJson.jar: //list轉(zhuǎn)換為json List<CustPhone> list = new ArrayList<CustPhone>(); String str=JSON.toJSON(list).toString(); //json轉(zhuǎn)換為list List<Person> list = new ArrayList<Person>(); list = JSONObject.parseArray(jasonArray, Person.class); ??
?
?
導(dǎo)入jar包直接調(diào)用,簡(jiǎn)單無(wú)煩惱。
?
另一方法 :
?
package com.listandjson;import java.util.ArrayList; import java.util.List; import net.sf.json.JSONArray;public class Test {public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("abc");list.add("123");//list轉(zhuǎn)成jsonString json =JSONArray.fromObject(list).toString();System.out.println(json); //運(yùn)行:["abc","123"]//json轉(zhuǎn)成listJSONArray jsonArray = JSONArray.fromObject(json);List<String> list2 = (List) JSONArray.toCollection(jsonArray);for (int i = 0; i < list2.size(); i++) {System.out.println(list2.get(i)); //運(yùn)行:abc// 123}} } ??
?
總結(jié)
以上是生活随笔為你收集整理的Json与List的相互转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 访问Access数据库需要注意的问题
- 下一篇: 这样想起...