zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    有趣的机器学习视频-第四章.强化学习
    有趣的机器学习视频-第五章.进化算法
    有趣的机器学习视频-第二章.人工神经网络
    有趣的机器学习视频-第三章.如何评价/检验神经网络
    有趣的机器学习视频-第一章.什么是机器学习
    AlphaStar
    AlphaZero
    AlphaGo分析
    nfs自动挂载
    postfix简单记录
  • 原文地址:https://www.cnblogs.com/hd92/p/13554335.html
Copyright © 2011-2022 走看看