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:

 
  1. /**

  2. *数据封装成json

  3. *

  4. * @param items 物料入库数据

  5. * @return json

  6. * @throws JSONException

  7. */

  8. public static String GoodIn2Json(List<GoodInfo> items) throws JSONException {

  9. if (items == null) return "";

  10. JSONArray array = new JSONArray();

  11. JSONObject jsonObject = null;

  12. GoodInfo info = null;

  13. for (int i = 0; i < items.size(); i++) {

  14. info = items.get(i);

  15. jsonObject = new JSONObject();

  16. jsonObject.put(Api.COLORID, info.getColorId());

  17. jsonObject.put(Api.STOCK, info.getStock());

  18. array.put(jsonObject);

  19. }

  20. return array.toString();

  21. }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
 
  1. /**

  2. * 将json数组解析出来,生成自定义数据的数组

  3. * @param data 包含用户自定义数据的json

  4. * @return 自定义信息的数据

  5. * @throws JSONException

  6. */

  7. public static List<MoreInfo> Json2UserDefine(String data) throws JSONException {

  8. List<MoreInfo> items = new ArrayList<>();

  9. if (data.equals("")) return items;

  10.  
  11. JSONArray array = new JSONArray(data);

  12. JSONObject object = null;

  13. MoreInfo item = null;

  14. for (int i = 0; i < array.length(); i++) {

  15. object = array.getJSONObject(i);

  16. String key = object.getString(Api.KEY);

  17. String value = object.getString(Api.VALUE);

  18. item = new MoreInfo(key, value);

  19. items.add(item);

  20. }

  21. return items;

  22. }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 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
  • 1
  • 1

而不是:

[{"name":"name0","age":0}{"name":"name3","age":15},{"name":"name4","age":20}] 
  • 1
  • 1
  • 1

很明显第一种格式并不是我想要的json格式,还要据循循环遍历json解析,想想就让人苦恼。 list里面参数少还好,如果有很多的话,岂不是要累死。

于是我百度了一下:list转换为json,不查不知道,一查原来还有json转换为list。狂吐两口老血!!! 
不过也算是学到了。 
1.使用谷歌的Gson.jar。 
2.使用阿里的fastJson.jar 
已经打包好了,地址: 
http://download.csdn.net/detail/demonliuhui/9666072

简单的令人发指:

谷歌的Gson.jar:

 
  1. //list转换为json

  2. Gson gson = new Gson();

  3. List<Person> persons = new ArrayList<Person>();

  4. String str = gson.toJson(persons);

  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4
 
  1. //json转换为list

  2. Gson gson = new Gson();

  3. List<Person> persons = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());

  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

阿里的fastJson.jar:

 
  1. //list转换为json

  2. List<CustPhone> list = new ArrayList<CustPhone>();

  3. String str=JSON.toJSON(list).toString();

  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
 
  1. //json转换为list

  2. List<Person> list = new ArrayList<Person>();

  3. list = JSONObject.parseArray(jasonArray, Person.class);

  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
  • 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值