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——>解析json——->list

於是自己寫了一個代碼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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM