将集合数据反转换为JSON格式

在开发中,我们用到的最多的就是从网络获取数据,显示到我们的客户端,基本上每一个项目中都会用到,那么我们如果是要将一些数据封装到集合中,然后提交到服务器去时怎么办呢?首先我们先来看看从网络获取数据的步骤吧:

这里案例是使用第三方异步加载(AsyncHttpClient)并且使用post方式向网络提出请求:

//=============POST方式请求数据==============================
        //创建访问网络对象
        AsyncHttpClient client=new AsyncHttpClient();
        
        client.post(url, new AsyncHttpResponseHandler() {
            
        @Override
        public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
            
            
            try {
                if(arg0==200){
                    
//                    Toast.makeText(getApplicationContext(), "正在请求数据", 4).show();
                    
                    String jsonstr=new String(arg2,"utf-8");
                    
                    //将JSON字符串转换为JSON数组
                    JSONArray jarray=new JSONArray(jsonstr);
                    
                    for (int i = 0; i < jarray.length(); i++) {
                        
                        JSONObject jo=jarray.optJSONObject(i);
                        
//                                Log.i("JSON对象",jo+"");
                        //创建商品实例对象
                        goods=new GoodsBean();
                        goods.setId(jo.getInt("Id"));
                        goods.setName(jo.getString("Name"));
                        goods.setPrice(jo.getDouble("Price"));
                        goods.setImageUrl(jo.getString("ImageUrl"));
                        goods.setTag(jo.getString("tag"));
//                        goods.setPaixustr(jo.getInt("Paixustr"));
//                        goods.setPrintaddress(jo.getString("printaddress"));
//                        goods.setRemarks(jo.getString("Remarks"));
//                        goods.setUnit(jo.getString("unit"));
                        
                        //所有商品集合
                        lsgoodAll.add(goods);
                    }
                    
                    
                    //分离出分类数据
                    for (PosType type : lstype) {
                        
                        String typeName = type.getTypename();
                        
                        goodsList = new ArrayList<GoodsBean>();
                        
                        for (GoodsBean good : lsgoodAll) {
                            
                            if (good.getTag().equals(typeName)) {
                                
                                goodsList.add(good);
                            }
                        }
                        
                        lsgoodsType.put(typeName, goodsList);
                    }
                    
                    
                    //显示所有商品
                    showAllProduct();
                }
                
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            

            }
            
            @Override
            public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
                // TODO Auto-generated method stub
                
            }
        });

我们在上面这段代码中看出从网络获取数据,请求成功,服务器返回的是一一串JSON字符串,然后将JSON字符串一步步转换为我们我们想要的数据格式,这里是最后封装到了集合中,回顾了一下从网络解析数据的过程,那么我们要将一个集合反转换为JSON格式的数据提交给服务器时,就简单多了,只要将顺序颠倒一下就好了是不是:下面是反转代码:

在上代码之前我们看看提交到服务器的json数据的格式:

/**
         * 初始化提交订单需要绑定的数据(既携带的参数)
         * 
         *  参数:
         *    String json  格式: [{"GoodsId":"3","Num":"3","Price":"3.5"}]
         *    int bid  商家ID
         *    String type  默认:  "flat"
         *    String orderid  不重复
         */

以上这一段是我在项目中使用到的,将一个订单数据提交到服务器,数据中的其中一个属性是json格式,也就是我们的订单集合转换后的JSON,它的格式:

格式: [{"GoodsId":"3","Num":"3","Price":"3.5"}]

看起来跟我们从服务器获取的JSON格式很像,那到底是怎么将一个集合转换成这样的呢:

/**
         * 初始化提交订单需要绑定的数据(既携带的参数)
         * 
         *  参数:
         *    String json  格式: [{"GoodsId":"3","Num":"3","Price":"3.5"}]
         *    int bid  商家ID
         *    String type  默认:  "flat"
         *    String orderid  不重复
         */
        
        //将订单集合反转换为JSON格式
        
        //先定义一个JSONArray
        JSONArray a1 = new JSONArray();
        
        //遍历我们要提交的服务器的集合数据
        for (int i = 0; i < lsob.size(); i++) {
            
            //再定义一个JSONObject对象
            JSONObject job= new JSONObject();
            
            try {
                
                //遍历出集合中每一个对象
                OrderBean ob=lsob.get(i);
                //使用put方式封装给每一个对象
                job.put("GoodsId", ob.getOrderId());
                
                job.put("Num", ob.getOdnum());
                
                job.put("Price", ob.getOdprice());
                
            } catch (JSONException e) {
                
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //再将每一个对象在封装到我们的JSONArray中
            a1.put(job);
        }
        //再将JSONArray转换为字符串
        json = a1.toString();
        
        Log.i("集合转换的JSON", json);
        
        
        //获取从登录界面绑定的字符串数据,从中提取出商品的ID
        try {
            String str=MySerialize.getObject("bussiness", getApplicationContext());
            bussiness=(Bussiness) MySerialize.deSerialization(str);
            Log.i("自助分类对象:", bussiness+"");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //商家ID
        bid=String.valueOf(bussiness.getId());
        
        //订单ID(这里使用当前系统时间作为订单ID)
        Long time=System.currentTimeMillis();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
        
        orderId=sdf.format(time);


完工



你可能感兴趣的:(将集合数据反转换为JSON格式)