问题由来:
最近由于做一个项目,项目的一个功能就是根据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
- 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
-
/**
-
* 将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
- 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:
-
//list转换为json
-
Gson gson = new Gson();
-
List<Person> persons = new ArrayList<Person>();
-
String str = gson.toJson(persons);
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
-
//json转换为list
-
Gson gson = new Gson();
-
List<Person> persons = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());
- 1
- 2
- 3
- 1
- 2
- 3
- 1
- 2
- 3
阿里的fastJson.jar:
-
//list转换为json
-
List<CustPhone> list = new ArrayList<CustPhone>();
-
String str=JSON.toJSON(list).toString();
- 1
- 2
- 3
- 1
- 2
- 3
- 1
- 2
- 3
-
//json转换为list
-
List<Person> list = new ArrayList<Person>();
-
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