Json與List的相互轉換
問題由來:
最近由於做一個專案,專案的一個功能就是根據Listview的內容生成一個二維碼,然後掃描二維碼獲取list,再重新顯示listview。
核心就是:
list—->生成二維碼——>獲取二維碼—–>獲取list
生成二維碼的方法:
http://blog.csdn.net/demonliuhui/article/details/52948696
由於生成二維碼的引數型別是String,不能是list。如果將list的內容get出來拼成String生成二維碼。掃描二維碼後如何處理String轉為list又是一個棘手的問題。因此我想到了將list的內容封裝成json,因為json本身就是String型別,所以生成二維碼就會很簡單,進而對json進行解析生成list。整個問題就變成了一個很easy的問題:
於是自己寫了一個程式碼list轉換為json:
/** *資料封裝成json * * @param items 物料入庫資料 * @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
- 21
/** * 將json陣列解析出來,生成自定義資料的陣列 * @param data 包含使用者自定義資料的json * @return 自定義資訊的資料 * @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; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
程式碼很簡單,就不詳解。這樣貌似就大功告成了,但是:
這樣只能處理list裡面只有一組資料的情況。如果迴圈封裝成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格式,還要據循迴圈遍歷json解析,想想就讓人苦惱。 list裡面引數少還好,如果有很多的話,豈不是要累死。
於是我百度了一下:list轉換為json,不查不知道,一查原來還有json轉換為list。狂吐兩口老血!!!
不過也算是學到了。
1.使用谷歌的Gson.jar。
2.使用阿里的fastJson.jar
已經打包好了,地址:
http://download.csdn.net/detail/demonliuhui/9666072
簡單的令人髮指:
谷歌的Gson.jar:
//list轉換為json
Gson gson = new Gson();
List<Person> persons = new ArrayList<Person>();
String str = gson.toJson(persons);
- 1
- 2
- 3
- 4
//json轉換為list
Gson gson = new Gson();
List<Person> persons = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());
- 1
- 2
- 3
阿里的fastJson.jar:
//list轉換為json
List<CustPhone> list = new ArrayList<CustPhone>();
String str=JSON.toJSON(list).toString();
- 1
- 2
- 3
//json轉換為list
List<Person> list = new ArrayList<Person>();
list = JSONObject.parseArray(jasonArray, Person.class);
- 1
- 2
- 3
匯入jar包直接呼叫,簡單無煩惱。
參考:
http://blog.csdn.net/qxs965266509/article/details/42774691
http://huyizizhen.iteye.com/blog/1453621
http://blog.csdn.net/u010797575/article/details/43304981
http://blog.csdn.net/paincupid/article/details/51221391
轉載:http://blog.csdn.net/demonliuhui/article/details/52949079